Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新启动java服务器的主要功能_Java_Application Restart - Fatal编程技术网

重新启动java服务器的主要功能

重新启动java服务器的主要功能,java,application-restart,Java,Application Restart,我正在用Java开发我的第一个服务器/客户机项目。它仍然非常基本,我能够在服务器和客户端程序之间交换一些数据。 现在,一旦客户端终止连接,我就面临重新连接的问题 我从VisualBasic编程,在那里我只需要一个计时器和一个布尔值,检查是否建立了连接,并最终重置套接字 我在Java中尝试了类似的方法,设置了一个Start方法和一个Restart方法,并在一个循环中检查布尔值的状态 不幸的是,eclipse一直给我一个消息,我不能对非静态字段进行静态引用。现在我完全迷路了 下面是服务器的代码,它可

我正在用Java开发我的第一个服务器/客户机项目。它仍然非常基本,我能够在服务器和客户端程序之间交换一些数据。 现在,一旦客户端终止连接,我就面临重新连接的问题

我从VisualBasic编程,在那里我只需要一个计时器和一个布尔值,检查是否建立了连接,并最终重置套接字

我在Java中尝试了类似的方法,设置了一个Start方法和一个Restart方法,并在一个循环中检查布尔值的状态

不幸的是,eclipse一直给我一个消息,我不能对非静态字段进行静态引用。现在我完全迷路了

下面是服务器的代码,它可以正常工作一次,但无法重新启动

package ComplexChatServer;

public class MainRoutine {
    public Boolean boIsRunning;
    public ConnectionHandlerS chsEins;
    public Boolean boConnected = false;
    public String strText;

    public void StartRunning() {
        boIsRunning = true;
        chsEins = new ConnectionHandlerS();
        chsEins.SocketListener();
    }

    public void ContinueRunning() {
        boConnected = chsEins.getClientStatus();

        if (boConnected == true) {
            //System.out.println("Connected");
            strText = null;
            strText = chsEins.ReadInput();

            if (strText != null && strText.isEmpty() == false) {
                System.out.println("Loop");
                System.out.println(strText);
                strText = "";
                boIsRunning = true;
            }
            else if (strText.equalsIgnoreCase("+++END+++")) {
                boIsRunning = false;
                System.exit(0);
            }
        }
        else {
            //System.out.println("Not connected");
        }

    }

    public static void main (String [] args) {
        int intRun;

        while (true) {
            if (boIsRunning = true) {
                intRun = 1;
            }
            else {
                intRun = 0;
            }

            switch (intRun) {
            case 0:
                StartRunning();
                break;
            case 1:
                ContinueRunning();
                break;
            }
        }
    }
}

不能对非静态成员进行静态调用。Java中的静态成员是属于类本身的成员;不属于它的对象。所以你要么实例化一个MainRoutine对象并调用它的方法,要么把你现有的方法转换成静态的方法,以便能够从你已经静态的main方法调用它们;取决于你想要实现什么

除此之外,传统的Java社区在命名方法和变量时使用驼峰式大小写。请检查以下语法和逻辑更正:

public static void main (String [] args) {
    MainRoutine routine = new MainRoutine();

    while(true) {
        if(boIsRunning) {
            routine.continueRunning();
        } else {
            routine.startRunning();
        }    
    }
}

正如@Bill Horvath在其评论中所述,请注意,您实际上是在退出流程,而不是重新启动流程。

我确实看到您的ifboIsRunning=true中有一个错误,因为它的计算结果始终为true,应该是==或者只是ifboIsRunning…您为什么要调用System.exit0?这将完全退出进程,您必须重新启动应用程序。此外,在Java中,使用小写启动方法是一种惯例。感谢您的帮助。我将查看给出的答案,以及类似问题的链接。为我辩护的三件事;-1.来自visual basic,因此我习惯于与=进行比较,而不是与==;2.我是在德语环境中长大的,所以我习惯用大写字母来开头名词,这样就错了;3.在某个时候,我可能想停止服务器,因此System.exit。谢谢你的帮助。