簡體   English   中英

使Java應用程序從命令提示符運行?

[英]Make a Java application run itself from the command prompt?

我有一個可執行的Jar文件,為了使其簡單,我想制作一個文件,以便您只需在桌面上雙擊它即可運行。 我已經試過了:

if(args.length == 0){
        String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String decodedPath = URLDecoder.decode(path, "UTF-8");
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec("java -jar \"" + decodedPath + "\" -arg");
        System.out.println("java -jar \"" + decodedPath + "\" -arg");
    }

無濟於事。 我假設如果我告訴程序檢查“ -arg”參數,並且該參數不存在,那么它將假定程序是從可執行文件運行的,而不是從命令行調用的。 那么有沒有辦法使該程序打開命令提示符,然后在其中運行自身,殺死以前的程序?

至於“雙擊運行”,這取決於操作系統。

您可以使用以下命令在命令行中“運行jar”:

java -jar the.jar

這要求jar具有META-INF/MANIFEST.MF ,並且此清單文件具有Main-Class條目,參數是main()方法所在的類。 例如:

Main-Class: org.foobar.mypackage.Foo

我針對類似問題所做的工作是,我在JAR文件中制作了一個單獨的GUI程序,其中一些JTextField用於輸入,而JButton用於確認。 單擊按鈕后,它將使用String數組中的那些值調用其他類中的main方法,以啟動該程序並使用frame.setVisible(false)關閉GUI窗體。 我建議您執行類似的操作,但這取決於您正在開發的程序類型。

您也可以在運行時將必要的命令行標志直接傳遞到JRE 我剛剛在幾周前就弄清楚了,但是您可以訪問java.library.path並將其更改為通過反射匹配必要的庫路徑,只需將這段代碼放在main方法的前面即可。

try{
    System.setProperty("java.library.path", path);
    Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
    fieldSysPath.setAccessible( true );
    fieldSysPath.set( null, null );
}catch(Exception ex){
    // just exit and tell user that there was an error or something similar
}

無論如何,我希望這會有所幫助。 您也可以通過類似的代碼來做許多類似的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM