java线程的while(true)循环只运行一次
我有一个实现Runnable
的类,我用另一个在窗口打开时运行的方法启动它自己的线程,但是Runnable
方法中的while循环只运行一次,我知道这一点,因为它只显示一次输出。这是下面的代码
static private final int SOCKET = 2222;
static JFrame frame = new JFrame();
static private ServerSocket serverSocket;
static private Socket socket;
static private DataOutputStream out;
static private DataInputStream in;
static private ArrayList<User> users = new ArrayList<>();
static private int logged = -1;
public GameServer() {
initComponents();
}
public void runServer() {
Thread server = new Thread(new StartServer());
server.start();
}
public void addUser(int logged, Socket socket, JTextArea taOut) {
users.add(logged, new User(socket, taOut, this, logged));
Thread thread = new Thread(users.get(logged));
thread.start();
}
public void removeUser(int index, Socket socket) {
users.remove(index);
updateIndexes();
try {
socket.close();
} catch (Exception e) {
taOut.append("Failed to close connection to user.\n");
}
}
public void updateIndexes() {
for (int i = 0; i == users.size()+1; i++) users.get(i).lowerIndex();
logged--;
}
public class StartServer implements Runnable {
@Override
public void run() {
taOut.append("Attempting to start server.\n");
try {
serverSocket = new ServerSocket(SOCKET);
} catch (Exception e) {
taOut.append("Port "+SOCKET+" is in use.\n");
return; // Prevent any further code from executing
}
taOut.append("Server started successfully.\n");
while (true) {
try {
taOut.append("Waiting for user...\n");
socket = serverSocket.accept(); // Wait for user to connect
logged++;
addUser(logged, socket, taOut);
taOut.append("Login request from: "+socket.getInetAddress()+"\n");
} catch (Exception e) {
taOut.append("There was an error with a user trying to connect.\n");
}
break;
}
}
}
private void formWindowOpened(java.awt.event.WindowEvent evt) {
runServer();
}
# 1 楼答案
循环体以终止循环的
break;
结尾。只要把它取下来,你就没事了