如何重新启动java应用程序,记住其命令行参数
我有一个java应用程序。它可以通过几个命令行标志启动。我想提供用户“重启”应用程序的能力 目前,我们将参数保存在一个控制文件中,在重新启动应用程序时读取它。重启应用程序的最佳方式是什么?如何保留命令行参数 使用如何重新启动java应用程序,记住其命令行参数,java,restart,Java,Restart,我有一个java应用程序。它可以通过几个命令行标志启动。我想提供用户“重启”应用程序的能力 目前,我们将参数保存在一个控制文件中,在重新启动应用程序时读取它。重启应用程序的最佳方式是什么?如何保留命令行参数 使用 java -jar appname.jar arg1 arg2 关闭当前的一个使用 System.exit(0); 在这里,您将不会面临保留arg的问题 例如,要从java app调用命令,您必须保留命令行参数。如果参数集是固定的,考虑编写一个小批量或shell脚本文件,
java -jar appname.jar arg1 arg2
关闭当前的一个使用
System.exit(0);
在这里,您将不会面临保留arg的问题
例如,要从java app调用命令,您必须保留命令行参数。如果参数集是固定的,考虑编写一个小批量或shell脚本文件,它只调用带有这组参数的java。 如果只想用参数启动一次,然后在没有参数的情况下重新启动应用程序,想让它使用上一次调用中的参数,请执行以下操作:
public static void main(String[] args) {
if (args.length == 0)
args = readArgsFromFile();
else
writeArgsToFile();
// ...
}
旁注:为了简单起见,我重用了
args
。为了获得更好的代码,如果需要,可以使用您可以检索的RuntimeMXBean、Classpath、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();
}
}
}
package-com;
导入java.lang.management.ManagementFactory;
导入java.lang.management.RuntimeMXBean;
类JMXTest{
公共静态void main(字符串参数[]){
试一试{
对于(int i=0;i
如果您真的想实现操作系统的跨平台兼容,它会根据用户的操作系统而有所不同。然后您应该提供启动脚本:shell for linux,比如OS/bat for windows,这些脚本设置类路径和参数
我不认为在应用程序中创建“重启”按钮是一个明智的决定,但是如果您想要像“eclipse重启”这样的东西,您应该看看RuntimeMXBean,它可以为您获得引导类路径 为什么不重新启动时从磁盘序列化并再次创建对象 您需要在
“CommandLineParams”
类中实现可序列化的接口来完成此操作
我认为这是完成你想做的事情最有条理的方式。谢谢。RuntimeMXBean.getInputArguments()-不获取传递给main方法的命令行参数。我打印了传递给命令行的属性等。@StackTrace我添加了两行来完成,我认为如何获取它们已经很清楚了。Classpath和VM参数不太容易获取。使用java com.JMXTest-arg1-arg2=val2 mx.getInputArguments()进行测试:返回空列表。javadoc说--*返回传递给Java虚拟机*的输入参数,其中不包括main方法.for(int i=0;i