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