重启 java 服务器的主要功能

Restart main function of a java server

我正在 Java 进行我的第一个 Server/Client 项目。它仍然非常基础,我能够在服务器和客户端程序之间交换一些数据。 现在,一旦客户端终止连接,我就无法重新连接。

我从 Visual Basic 开始,在那里我只有一个计时器和一个布尔值,检查是否建立了连接并最终重置套接字。

我在 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 中的静态成员是属于 class 本身的成员;不属于它的对象。因此,您要么必须实例化一个 MainRoutine 对象并调用它的方法,要么将现有方法转换为静态方法,以便能够从已经静态的 main 方法中调用它们;取决于你想要达到的目标。

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

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

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

正如@Bill Horvath 在他的评论中所说,请注意您实际上是在退出进程而不是重新启动它。