2009-07-01 111 views
3

我在使用Windows Powershell 2.0運行Java程序時遇到了問題。 任何幫助,將不勝感激。我想要字符串 「Hello World!」打印到主Powershell控制檯窗口。 取而代之的是,它打印到一個單獨的過程窗口,然後突然關閉,打開 。我不知道如何告訴powershell將生成的java進程的stdout重定向到當前的powershell控制檯。基本上,我想要的行爲就像我在DOS shell下運行java時所得到的一樣。如何從Windows Powershell調用Java進程?

我的測試類是:

class HelloWorldApp { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); //Display the string. 
    } 
} 

我的PowerShell 2.0的代碼是這樣的:

set-item -path Env:CLASSPATH -value C:\Test 
"CLASSPATH = $Env:CLASSPATH" 
[Diagnostics.Process]::Start('java.exe','-classpath $Env:CLASSPATH C:\ 
Test\HelloWorldApp') 

另外,我試圖像這樣運行它,因爲我有定期 DOS的外殼,希望輸出顯示在同一個控制檯上:

java.exe -classpath $Env:CLASSPATH C:\Test\HelloWorldApp 

它ca使用錯誤。我得到這個錯誤:

PS >C:\Test\Test.ps1 
CLASSPATH = C:\Test 
java.exe : java.lang.NoClassDefFoundError: C:\Test\HelloWorldApp 
At C:\Test\Site.ps1:3 char:5 
+ java <<<< -classpath $Env:CLASSPATH C:\Test\HelloWorldApp 
+ CategoryInfo : NotSpecified: (java.lang.NoCla...e\HelloWorldApp: 
           String) [], RemoteException 
+ FullyQualifiedErrorId : NativeCommandError 
Exception in thread "main" 

至於我可以告訴大家,我的ARG遊戲正確的,因爲這裏是什麼 PCEX(http://pscx.codeplex.com)echoargs cmdlet的告訴我:

PS >echoargs java.exe -classpath $Env:CLASSPATH C:\Test\HelloWorldApp 
Arg 0 is <java.exe> 
Arg 1 is <-classpath> 
Arg 2 is <C:\Test> 
Arg 3 is <C:\Test\HelloWorldApp> 

林相信有一個辦法得到這個工作,因爲此代碼的工作:

## Test.ps1 
cd C:\PSJustice 
java.exe -classpath . HelloWorldApp 

而且,這個工程:

cd C:\ 
java.exe -classpath C:\Test HelloWorldApp 
+0

您正在獲取NoClassDefFoundError,因爲java.exe期望從該類所在的目錄(或包結構的根目錄)中調用。不過不知道PowerShell部分。 – 2009-07-01 22:10:31

回答

5

我終於明白了。它是最小的錯字:

cd c:\ 
set-item -path Env:CLASSPATH -value C:\Test 
"CLASSPATH = $Env:CLASSPATH" 
java.exe -classpath $Env:CLASSPATH HelloWorldApp 

當指定的類名不能包含絕對路徑前綴的類名。哎呀。