使用来自 JavaFx 应用程序的参数执行 Runnable Jar
Execute Runnable Jar with args from JavaFx application
我需要 运行 来自 java fx 应用程序的可执行 jar。
我正在尝试使用以下代码:
public void runJar() {
try {
//String serverIp = oRMIServer.getServerIP();
String arg1 = "\"arg1\"";
String arg2 = "\"arg2\"";
String command = "java -jar " + "path/of/jar.jar " + arg1 + " " + arg2;
Runtime run = Runtime.getRuntime();
Process proc = run.exec(command);
} catch (Exception e) {
System.out.println("Exception occured "+e);
}
令人惊讶的是,如果我正在创建一个新的 class 并编写此代码,它 运行 会出现在我的日食中,但是从我的 Java FX 应用程序来看,此代码不是 运行宁在所有。我看不到任何看起来像是被跳过的东西。
有人可以帮助如何使用来自 Java FX 应用程序的参数执行 java 可执行 jar。
虽然我现在用过
String command = "cmd /c start \"\" \"" + classPath + "\jre\bin\javaw.exe\" -jar \"" + classPath + "\jarName.jar\" " + runTimeArg1 + " " + runTimeArg2;
Runtime run = Runtime.getRuntime();
Process proc = run.exec(command);
在此之后也没有任何进展。请帮忙!
确保您的代码在 try catch 中 运行 并打印堆栈跟踪。您应该使用 String[] command
以便不使用字符串连接并使用 ProcessBuilder
调用以便您可以看到子进程的 STDOUT/ERR。这是一个例子:
try {
String java = Path.of(System.getProperty("java.home"),"bin", "javaw.exe").toAbsolutePath().toString();
String[] command = new String[] {java, "-jar", "\path\to\yourName.jar", "runTimeArg1", "runTimeArg2"};
exec(command); // or Runtime.getRuntime().exec(command);
} catch (Exception e) {
System.out.println("Exception occurred "+e);
e.printStackTrace();
}
public static int exec(String[] cmd) throws InterruptedException, IOException
{
System.out.println("exec "+Arrays.toString(cmd));
ProcessBuilder pb = new ProcessBuilder(cmd);
Path tmpdir = Path.of(System.getProperty("java.io.tmpdir"));
Path out = tmpdir.resolve(cmd[0]+"-stdout.log");
Path err = tmpdir.resolve(cmd[0]+"-stderr.log");
pb.redirectOutput(out.toFile());
pb.redirectError(err.toFile());
// OR pb.redirectErrorStream(true);
Process p = pb.start();
long pid = p.pid();
System.out.println("started PID "+pid);
int rc = p.waitFor();
System.out.println("Exit PID "+pid+": RC "+rc +" => "+(rc == 0 ? "OK": "**** ERROR ****"));
System.out.println("STDOUT: \""+Files.readString(out)+'"');
System.out.println("STDERR: \""+Files.readString(err)+'"');
System.out.println();
return rc;
}
我需要 运行 来自 java fx 应用程序的可执行 jar。 我正在尝试使用以下代码:
public void runJar() {
try {
//String serverIp = oRMIServer.getServerIP();
String arg1 = "\"arg1\"";
String arg2 = "\"arg2\"";
String command = "java -jar " + "path/of/jar.jar " + arg1 + " " + arg2;
Runtime run = Runtime.getRuntime();
Process proc = run.exec(command);
} catch (Exception e) {
System.out.println("Exception occured "+e);
}
令人惊讶的是,如果我正在创建一个新的 class 并编写此代码,它 运行 会出现在我的日食中,但是从我的 Java FX 应用程序来看,此代码不是 运行宁在所有。我看不到任何看起来像是被跳过的东西。 有人可以帮助如何使用来自 Java FX 应用程序的参数执行 java 可执行 jar。
虽然我现在用过
String command = "cmd /c start \"\" \"" + classPath + "\jre\bin\javaw.exe\" -jar \"" + classPath + "\jarName.jar\" " + runTimeArg1 + " " + runTimeArg2;
Runtime run = Runtime.getRuntime();
Process proc = run.exec(command);
在此之后也没有任何进展。请帮忙!
确保您的代码在 try catch 中 运行 并打印堆栈跟踪。您应该使用 String[] command
以便不使用字符串连接并使用 ProcessBuilder
调用以便您可以看到子进程的 STDOUT/ERR。这是一个例子:
try {
String java = Path.of(System.getProperty("java.home"),"bin", "javaw.exe").toAbsolutePath().toString();
String[] command = new String[] {java, "-jar", "\path\to\yourName.jar", "runTimeArg1", "runTimeArg2"};
exec(command); // or Runtime.getRuntime().exec(command);
} catch (Exception e) {
System.out.println("Exception occurred "+e);
e.printStackTrace();
}
public static int exec(String[] cmd) throws InterruptedException, IOException
{
System.out.println("exec "+Arrays.toString(cmd));
ProcessBuilder pb = new ProcessBuilder(cmd);
Path tmpdir = Path.of(System.getProperty("java.io.tmpdir"));
Path out = tmpdir.resolve(cmd[0]+"-stdout.log");
Path err = tmpdir.resolve(cmd[0]+"-stderr.log");
pb.redirectOutput(out.toFile());
pb.redirectError(err.toFile());
// OR pb.redirectErrorStream(true);
Process p = pb.start();
long pid = p.pid();
System.out.println("started PID "+pid);
int rc = p.waitFor();
System.out.println("Exit PID "+pid+": RC "+rc +" => "+(rc == 0 ? "OK": "**** ERROR ****"));
System.out.println("STDOUT: \""+Files.readString(out)+'"');
System.out.println("STDERR: \""+Files.readString(err)+'"');
System.out.println();
return rc;
}