2012-01-27 117 views
3

有沒有方法可以在不使用Runtime.exec的情況下從Java應用程序中啓動java類(並將其傳遞給類路徑和庫路徑)?從另一個Java應用程序啓動Java類

我看到: Launch a java application from another java application

,但需要能夠通過一個CLASSPATH和libary路徑。

我試圖製作一個用戶下載的啓動器,它會下載所需的文件,然後啓動它們。

謝謝

+2

你有沒有探討[Java Web Start的(http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136112.html )? – adarshr 2012-01-27 11:07:05

+0

我希望用戶下載文件到他們機器上的任何地方,並將文件下載到他們的個人文件夾: windows%appdata%\ folderName mac/linux〜/ folderName – WookooUK 2012-01-27 11:09:19

+0

@adarshr正是我在想什麼,但稍微[不同的鏈接](http://stackoverflow.com/tags/java-web-start/info)。它包含JWS上各種有用頁面的鏈接,包括Oracle自己的頁面。 – 2012-01-27 11:11:58

回答

4

https://stackoverflow.com/a/5575619/20394應解釋如何添加到庫路徑,仍然使用相同的JVM。

要添加到類路徑中,請創建您自己的URLClassLoader並將其用於要加載的類,然後反射性地調用其啓動方法。

URLClassLoader classLoader = new URLClassLoader(
    urlsToDirectoriesAndJars, getClass().getClassLoader()); 
Class<?> myMainClass = classLoader.findClass("pkg.path.for.MainClass"); 
Method main = myMainClass.getMethod("main", String[].class); 
main.invoke(null, new Object[] { new String[] { "args", "for", "main" } }); 

您需要處理一些由反射API引發的異常,但這是它的要點。

如果類調用System.exit,然後看看How to prevent calls to System.exit() from terminating the JVM?

+0

哇,這就是我正在尋找的,謝謝。 – WookooUK 2012-01-27 11:30:13

相關問題