簡體   English   中英

從指定目錄啟動Java應用程序(主)

[英]Launch Java application (main) from specified directory

我有一個非常大/老/長期運行的項目,該項目使用相對於啟動目錄的路徑訪問文件資源(即,該應用程序僅在從特定目錄啟動時才起作用)。 當我需要調試程序時,可以從Eclipse中啟動它,並使用“運行配置”->->“工作目錄”來設置開始目錄。 我希望能夠編寫一個Java類,該類將從指定目錄啟動主類。 這可能嗎,如果我會怎么做? 我發現了一些相關的項目,包括以下所示的項目,但似乎找不到我要的答案。

https://community.oracle.com/thread/1257595?start=0&tstart=0

http://www.javapractices.com/topic/TopicAction.do?Id=243

如何從其他目錄運行Java程序?

Java-在不同的過程中啟動另一個類的main

根據這個你可以寫與主要的是一個簡單的類:

  1. 要求一個工作目錄
  2. 將您的jar復制到所選目錄中
  3. 執行罐子
  4. 從選擇目錄中刪除jar。

例如

public class Exec
{
   public static void main(String []args) throws Exception
    {   choosenDir=askForWorkingDirectory()
        jarFileNameWithabsolutePath=copyJarIntoDir(choosenDir)
        Process ps=Runtime.getRuntime().exec(new String[]{"java","-jar",jarFileNameWithabsolutePath});
        ps.waitFor();
        java.io.InputStream is=ps.getInputStream();
        byte b[]=new byte[is.available()];
        is.read(b,0,b.length);
        System.out.println(new String(b));
        deleteJarFormChoosenDir(jarFileNameWithabsolutePath);
    }
}

哪里:

askForWorkingDirectory()顯示DirectoryChooser對話框並返回絕對路徑。

copyJarIntoDir(choosenDir)接收選擇的目錄,在該目錄中復制jar文件,並返回具有文件名的jar文件的絕對路徑。

deleteJarFormChoosenDir(jarFileNameWithabsolutePath)最終刪除復制的jar

希望我能幫到您!

將Runtime.getRuntime.exec與可選的運行時目錄參數配合使用對我來說很有效。

這是我使用的:

public static void main(String[] args) throws Exception {
    String classPath = getClassPath();
    Runtime.getRuntime().exec("java -cp " + classPath + " com.mycompany.MyApp", null, MY_WORKING_DIR);
}

private static String getClassPath() {
    StringBuffer buffer = new StringBuffer();
    URLClassLoader urlClassLoader = ((URLClassLoader) (Thread.currentThread().getContextClassLoader()));
    URL[] urls = urlClassLoader.getURLs();
    for (URL url : urls) {
        buffer.append(new File(url.getPath()));
        buffer.append(System.getProperty("path.separator"));
    }
    String rtn = buffer.toString();
    return rtn;
}

暫無
暫無

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

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