2013-04-17 20 views
0

使用流程構建器在其自己的OS進程中啓動其他Java應用程序。該實現在Windows 7上運行,但不在Linux上運行。兩臺機器都使用Java 1.7。下面是一些示例代碼:Java類在Linux中無法找到或加載主類,但是Windows ok

//Windows OK, but Linux Could not find or load main class 
//weka.subspaceClusterer.MySubspaceClusterEvaluation 

ArrayList<String> commands = new ArrayList<String>(); 
commands.add("java"); 
commands.add("-cp"); 
commands.add("\".:lib/*\""); 
commands.add("weka.subspaceClusterer.MySubspaceClusterEvaluation"); 
procBuilder = new ProcessBuilder(); 
procBuilder.inheritIO(); 
procBuilder.command(commands); 
Process proc = procBuilder.start(); 

回答

1

我遇到了在Mac OS X中的類似問題它的工作在終端,但不是在Eclipse。如果我刪除類路徑字符串的引號,它對我有用。我猜Eclipse JVM在引用任何傳遞給ProcessBuilder的參數時不會喜歡它。

+1

謝謝。現在是很久以前,我不記得它是如何運作的。 :-) – ahoffer

1

類路徑分隔符是; Windows下,但Unix下:

考慮創建一個可運行jar,其中類路徑存儲在MANIFEST.MF條目中,因此您可以執行java -jar whatever.jar

+0

他正在使用:在Linux中。我同意清單,但我不認爲這是問題。 – whiskeyspider

+0

我使用Eclipse創建了一個可執行的jar文件。可執行的jar在Windows上運行。在Linux上,它仍然無法找到類MySubspaceClusterEvaluation。 – ahoffer

+0

可執行jar必須以「java -jar foo.jar」啓動 –

0

您的代碼看起來正確。它只是找不到你的類文件。請嘗試設置進程的工作目錄:

procBuilder.directory(new File("package/structure/starts/here")); 
+0

我試過directory()來設置包結構的根目錄,但它沒有解決問題。我不太瞭解Java及其安全模型。爲了安全起見,JVM能夠阻止我爲了訪問類文件而分叉的進程嗎? – ahoffer

相關問題