2012-05-13 59 views
1

我在使用ProcessBuilder在我的項目中運行一個類時遇到了問題。 我的代碼:Java ProcessBuilder

public class Main { 
    public static void main(String[] args) { 
     try { 
      String pathToJar = Main.class.getProtectionDomain().getCodeSource() 
        .getLocation().toURI().getPath(); 
      ArrayList<String> params = new ArrayList<String>();  
      params.add("javaw"); 
      params.add("-classpath"); 
      params.add(pathToJar); 
      params.add("Program"); 
      ProcessBuilder pb = new ProcessBuilder(params); 
      Process process = pb.start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

類節目是在同一個項目中(同一bin文件夾),如果直接運行工作正常,但這樣一來我得到的錯誤「找不到主類:程序」。我的代碼中的錯誤在哪裏?

在此先感謝。

[編輯] 我來到我的程序類的一些代碼給出錯誤的結論。基本上只運行「乾淨」的主。在eclipse中,Program類正在導入一些jar文件內的庫。我不需要在ProcessBuilder中引用它嗎?如果是這樣,怎麼樣?

+0

什麼***包***是'程序'類?在'params.add(「Program」);'你需要提供完全合格的類名。 –

+0

沒有任何類具有包。無論如何,把這兩個包build.test如此改變'params.add(「build.test.Program」);'。還是一樣的錯誤 – Ciro

+0

你試過輸出'pathToJar'的值嗎?這是你期望的嗎? –

回答

2

在回答您的編輯:

您可以通過params.add(System.getProperty("java.class.path").concat(";").concat(pathToJar))‌​;切換params.add(pathToJar);添加當前路徑。

1

我的代碼中的錯誤在哪裏?

(你啓動javaw可執行文件,所以這不是問題。它也不是你的入口點方法的簽名是不正確的,因爲這將給予不同的診斷。)

問題是類名稱不正確(例如,如果應該是「come.pkg.Program」),或者JAR文件的路徑名不正確。


假設你已經消除類名是不正確的可能性,我的猜測是,你要使用相對路徑名的JAR文件,但有一些混淆當前目錄是什麼;即需要解析路徑名的目錄。嘗試在classpath參數中使用絕對路徑名。

+0

。還測試了包,同樣的錯誤。 – Ciro

+0

我可能是錯誤的入口點。如果以上都沒有幫助,請向我們展示'Program'類和它的'main'方法的簽名。 –