web-dev-qa-db-ja.com

Javaプログラムから.jarファイルを実行する

Javaプログラムからローカルjarファイルを実行するにはどうすればよいですか?

Jarファイルは、Java呼び出し元プログラムのクラスパスにありません。

35
vfgjrk

ProcessBuilder を使用して新しいJVMを起動することをお勧めします。

ここから始めましょう。

ProcessBuilder pb = new ProcessBuilder("/path/to/Java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
41
aioobe
    Process proc = Runtime.getRuntime().exec("Java -jar Validate.jar");
    proc.waitFor();
    // Then retreive the process output
    InputStream in = proc.getInputStream();
    InputStream err = proc.getErrorStream();

    byte b[]=new byte[in.available()];
    in.read(b,0,b.length);
    System.out.println(new String(b));

    byte c[]=new byte[err.available()];
    err.read(c,0,c.length);
    System.out.println(new String(c));
12
Anderson Lopes

Windowsで行う別の方法は次のとおりです。

Runtime.getRuntime().exec("cmd /c start jarFile");

このようにして、プロセスの優先度も設定できます(通常/低/など)

4
Johnydep

まず、問題の説明が少し不明瞭です。 jarファイルからクラスをロードしてアプリケーションで使用するのか、または実行するメインファイルがjarに含まれているのかがわかりません。私はそれが2番目であると仮定します。

もしそうなら、ここで多くのオプションがあります。最も簡単なものは次のとおりです。

String filePath; //where your jar is located.
Runtime.exec(" Java -jar " + filepath);

出来上がり... jarファイルを実行する必要がなく、クラスをロードする必要がある場合は、お知らせください。

3
Nikola Yovchev

この1行のコードのみを使用することにより、任意の場所からjarファイルを実行できます。

    Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));

どこで

new File("your path to jar")

それが役に立てば幸い。

ありがとう。

2
Syeda Zunairah
2
Chris Dennett

Javaアプリケーション内から実行可能jarを実行するには、 https://docs.Oracle.com/javase/tutorial/deploymentからJarClassLoaderをコピーできます。 /jar/examples/JarClassLoader.Java

このように使用します。このスニペットでは、jarUrlは、jarをダウンロードするURLです。たとえば、 file:/tmp/my-jar.jar で、argsは、渡す文字列の配列です。 jarへのコマンドライン引数。

JarClassLoader loader = new JarClassLoader(jarUrl);
String main = loader.getMainClassName();
loader.invokeClass(main, args);

コードに他の誰かのバイナリを挿入していることに注意してください。無限ループでスタックした場合、スレッドはハングし、System.exit()を呼び出すと、JVMは終了します。

0
Mzzl
  1. Jarライブラリーをプロジェクトに追加します
  2. メインクラスをインポートする(jarファイルのマニフェストを参照)
  3. 引数で静的メソッドmainを呼び出します

    String args[] = {"-emaple","value"};
    PortMapperStarter.main(args);