如何重新启动java应用程序,记住它的命令行参数
我有一个Java应用程序。它可以用几个命令行标志开始。我想提供用户“重新启动”应用程序的能力。如何重新启动java应用程序,记住它的命令行参数
当前我们将参数保存在控制文件中,在重新启动应用程序时读取它。什么是重新启动应用程序的最佳方式 - 如何保留命令行参数?
使用RuntimeMXBean你可以检索,类路径,BOOTCLASSPATH等
package com;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
class JMXTest {
public static void main(String args[]) {
try {
for (int i = 0 ; i < args.length ; i++)
System.out.println("args :" + args[i]);
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
System.out.println("boot CP:" + mx.getBootClassPath());
System.out.println(" CP:" + mx.getClassPath());
System.out.println("cmd args:" + mx.getInputArguments());
}
catch(Exception e) {
e.printStackTrace();
}
}
}
使用调用新
java -jar appname.jar arg1 arg2
接近当前使用
System.exit(0);
在这里,你会不会面临留住ARG
Here的问题是,例如,从Java应用程序调用命令
无论如何,你必须坚持命令行参数。如果这组参数相当固定,可以考虑编写一个小批处理或shell脚本文件,该文件除了用这组参数调用java之外什么都不做。
如果你只是想带参数一旦启动它,然后,如果重新启动不带参数的应用,想拥有它使用的参数从以前的号召,做这样的事情:
pubic static void main(String[] args) {
if (args.length == 0)
args = readArgsFromFile();
else
writeArgsToFile();
// ..
}
旁注:为了简单起见,我重复使用了args
。为了更好的代码,如果需要的话,接收或者储存的参数复制到另一个数据结构,另一个数组,一个Properties实例,...
它根据用户的操作系统而有所不同,如果你真的想做到这一点OS跨平台兼容。那么你应该提供启动脚本:用于Linux的shell,比如OS/bat for windows,这些脚本设置了类路径和参数。
我不认为在应用程序中创建“重新启动”按钮是一个明智的决定,但是如果你想要类似“eclipse restart”的东西,你应该看看RuntimeMXBean,它可以为你启动classpath。
为什么不重新序列化并在磁盘上重新创建对象?
您需要在"CommandLineParams"
类中实现Serializable
接口来完成此操作。
我认为这是最有条理的方式来完成你正在尝试做的事情。
谢谢。 RuntimeMXBean.getInputArguments() - 不会获取传递给main方法的命令行参数。我打印传递给命令行的属性等。 – Jayan 2010-10-04 12:28:41
@StackTrace我添加了两行来完成,我认为已经很清楚如何获取它们。 Classpath和VM参数并不是那么容易得到。 – stacker 2010-10-04 12:53:03
用java测试com.JMXTest -arg1 -arg2 = val2 mx.getInputArguments():这将返回空列表。 javadoc说 - *返回传递给Java虚拟机 *的输入参数,该参数不包含主要方法的参数。 – Jayan 2010-10-05 06:29:31