2012-01-27 8 views
3

Runtime.execを使用せずに、Javaアプリケーション内からJavaクラスを起動(およびクラスパスとlibaryパスを渡す)する方法はありますか?別の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

+0

私は自分のマシン上のどこにでもファイルをダウンロードし、ホームフォルダにダウンロードするファイルを windows%appdata%\ folderName mac/linux〜/ folderName – WookooUK

+0

@adarshrと思っています。少し[別のリンク](http://stackoverflow.com/tags/java-web-start/info)。これには、Oracle独自のページも含め、JWS上のさまざまな有益なページへのリンクが含まれています。 –

答えて

4

https://stackoverflow.com/a/5575619/20394ライブラリパスに追加して、まだ同じJVMを使用する方法について説明しなければならないありがとうございます。

クラスパスに追加するには、独自のURLClassLoaderを作成し、ロードするクラスにfindを使用してから、その開始メソッドを反射的に呼び出します。

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

関連する問題