我们都知道下面代码的作用
class Demo{
public static void main(String b[]){
System.out.println("Argument one = "+b[0]);
System.out.println("Argument two = "+b[1]);
}
}
我的问题(好奇心)是,如果这个应用程序是一个正在运行的守护进程,而基于java的服务器正在等待客户端对它进行套接字,我可以再次运行该应用程序,并将新参数传递给它吗?基本上我在看不实现cli有点事。我需要它简单。
编辑:我想在运行时更改/添加更多参数。但是,如果我使用新参数运行应用程序,不会启动另一个实例吗?
答案 0 :(得分:1)
不,您无法修改应用程序启动后传递的参数。
用于检索参数的数组在启动时填充,不能更改。
如果应用程序是服务器,您应该可以使用等待输入的简单线程轻松实现CLI。
答案 1 :(得分:1)
似乎您现在正在作为命令行应用程序运行现有应用程序。当需要从命令行传递适当的命令行参数时,它将被调用。现在你要做的是将这个相同的应用程序托管为守护进程服务,当参数通过它正在侦听的端口时调用它。
假设您的目标是以上,无论出于何种原因,您希望保留上述main()
签名,关键是要意识到main()
方法也可以像任何其他可以调用的静态方法一样通过类引用。所以以下是可能的:
class SocketListener extends Thread {
public void run() {
// Code for listening to socket that calls invokeDemo()
// method below once it detects the appropriate args.
}
private void invokeDemo(String[] args) {
// You can invoke the main method as any other static method.
Demo.main(args);
}
}
这只会将Demo类视为它正在使用的库的一部分,而不是启动任何其他应用程序。如果您确实希望将其作为应用程序启动(由于某些特殊原因),则需要使用java的Process和Runtime类。