守护程序运行时的Java命令行

时间:2013-05-29 08:32:17

标签: java

我们都知道下面代码的作用

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

我的问题(好奇心)是,如果这个应用程序是一个正在运行的守护进程,而基于java的服务器正在等待客户端对它进行套接字,我可以再次运行该应用程序,并将新参数传递给它吗?基本上我在看实现cli有点事。我需要它简单。

编辑:我想在运行时更改/添加更多参数。但是,如果我使用新参数运行应用程序,不会启动另一个实例吗?

2 个答案:

答案 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类。