2012-06-21 129 views
1

我想合併2個程序,我已經對一個.jar文件。一個程序是用java編寫的.jar,第二個是用C++編寫的.exe。我把這兩個文件都放到了新的.jar中,寫下了這段代碼,但它不起作用。當這段代碼被導出到.jar並且沒有執行2個文件時,我在cmd中出現錯誤「沒有主清單屬性,在merged.jar中」。雖然它在eclipse中運行時效果很好。運行.exe打包在.jar

public class main 
    { 
     public static void main(String[] args) 
    { 
     try 
    { 
     Runtime.getRuntime().exec("cmd /c project1.jar"); 
     Runtime.getRuntime().exec("cmd /c project2.exe"); 
    } 
    catch(Exception exce) 
    { 
    /*handle exception*/ 
     } 
     } 
    } 

任何想法如何解決這個問題還是有另一種方法來做到這一點?我是java的新手,所以想不到任何好的東西。也許有可能將這些文件放到Windows中的臨時位置並在執行後刪除它們?

+3

不能運行exe文件是一個jar文件中。 Windows不會在那裏找到它。 – Thilo

+0

EXE是做什麼的?放置Java應用程序有什麼好處。作爲EXE的包裝?爲什麼不用C++編寫該部分呢? –

+0

一般提示。 1)對代碼塊使用一致的邏輯縮進。 2)在每個'catch'中,添加'e.printStackTrace()'作爲它的一部分。 3)複製/粘貼錯誤輸出並使用代碼格式。 4)如果'/ * handle exception * /'不是**字面意義**正在異常處理程序中使用的代碼,請發佈[SSCCE](http://sscce.org/)。 –

回答

1

看看JAR File Specification

您必須更新您的MANIFEST文件以使用包含main()方法的類來填充「Main-Class」屬性。

+0

要解決至少「我得到錯誤」沒有主清單屬性,在merged.jar「在CMD」,在該答案。 – Arcadien

+0

哦,我的壞。 ..:P –

1

你可以試試這個:

String filePath = "C:/Path/to/my/file.exe"; 
    try { 

     Process p = Runtime.getRuntime().exec(filePath); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

我會爲'printStackTrace()''+1',但用於:1)此資源(可執行文件)位於Jar中。所以所陳述的道路不會指向它。沒有文件路徑可以。 **它不是*文件** 2)使用'ProcessBuilder'來構建'Process'。這使得它至少有一個步驟更容易:3)實現** all ** [Runtime.exec()不會]的建議(http://www.javaworld.com/javaworld/jw-12-2000 /jw-1229-traps.html) –