重启 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 在他的评论中所说,请注意您实际上是在退出进程而不是重新启动它。
我正在 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 在他的评论中所说,请注意您实际上是在退出进程而不是重新启动它。