0

We all know what the code below does

class Demo{
     public static void main(String b[]){
         System.out.println("Argument one = "+b[0]);
         System.out.println("Argument two = "+b[1]);
    }
}

My question (infact curiosity) is, if this application is a daemon that is running and java based server waiting for clients to do socket stuff with it, can I run the application again, and pass new parameters to it ? Basically I am looking at not implementing a cli kinda thing. I need it simple.

Edit : I want to change / add more parameters at runtime. But if I run the app with new parameters, wont it start another instance ?

4

2 回答 2

1

不,您不能修改应用程序启动后传递的参数。

用于检索参数的数组在启动时已填充且无法更改。

如果应用程序是服务器,您应该能够通过等待输入的简单线程轻松实现 CLI。

于 2013-05-29T08:42:50.547 回答
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 类。

于 2013-05-29T09:05:57.623 回答