我正在编写一个类似编辑器的程序。如果用户在主窗口中选择File-> Open,我想以所选文件名作为参数启动编辑器进程的新副本。但是,为此,我需要知道用于启动第一个进程的命令:
java -jar myapp.jar blabalsomearguments // --- need this information
> Open File (fileUrl)
> exec("java -jar myapp.jar blabalsomearguments fileUrl");
我不是在寻找进程内解决方案,我已经实现了。我想拥有独立流程带来的好处。
答案 0 :(得分:1)
因为你正在推出Java - >在Java中,您可以使用现有的类路径在命令行上设置类路径。这种类型的东西在开发环境中也非常好用。
ProcessBuilder selfLauncher = new ProcessBuilder(
"java", "-cp", System.getProperty("java.class.path"),
"com.my.mainClass" );
selfLauncher.start();
<强>更新强> 对于可执行jar文件,您将拥有一个类路径,它只是jar文件本身的相对路径。如果需要命令行参数,则必须将它们保存在main中,并在启动时重新应用它们。
您可以通过将以下程序打包到jar中来看到这一点。我真的不确定如果你在可执行jar文件中有jar,会发生什么。它们可能出现在类路径中。
public class TestJarPath {
public static void main(String args[]) throws Exception {
for (String s : args)
System.out.print("[" + s + "] ");
System.out.println();
String cp = System.getProperty("java.class.path");
for (String s : cp.split(";"))
System.out.println(s);
}
}
对于java -jar ..\tst.jar X
,您会得到如下输出:
[X]
..\tst.jar
答案 1 :(得分:0)
如果所有其他方法都失败了,请尝试编写批处理/ shell脚本来启动您的应用。在Windows中,您可以将%CmdCmdLine%传递给Java以获取整个命令行。
答案 2 :(得分:0)
据我所知,没有可移植的方法来获取此信息。我在gcj运行时发现了一个属性,但我怀疑它会覆盖很大一部分用户。
我认为接受的做法是“尝试并祈祷”:
希望它在路径上,(路径可用,因此可以检查)
如果没有,检查是否定义了JAVA_HOME,并使用它来查找java。
如果没有检查所有操作系统上最可能的位置,那么您已收到错误报告。
嗯,这很麻烦......最好检查JAVA_HOME和路径,并要求用户在失败的情况下明确配置JVL。