I have a 2 button using Swing API to handle a Socket server thread.
The problem is, when I start a new Socket Server is success.
Java Thread ID:19
But when I stop, and start again : its said
Java Thread ID:20
Exception server handler: Address already in use (Bind failed)
Here is the source code. Any help it so appreciated.
private Thread worker;
private final AtomicBoolean running = new AtomicBoolean(false);
private boolean isRunning() {
return running.get();
}
private void interrupt() {
running.set(false);
worker.interrupt();
}
// Function start a thread server socket
private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {
// Validation
if (textFieldDirectory.getText() != null && !textFieldDirectory.getText().isEmpty()) {
worker = new Thread(new ServerHandler());
worker.start();
btnStart.setEnabled(false);
btnStop.setEnabled(true);
} else {
textAreaLog.append(this.createLog("Please", "Failed"));
}
}
// Function stop those thread
private void btnStopActionPerformed(java.awt.event.ActionEvent evt) {
interrupt();
btnStart.setEnabled(true);
btnStop.setEnabled(false);
}
public class ServerHandler implements Runnable {
@Override
public void run() {
try {
running.set(true);
ServerSocket serverSocket = new ServerSocket(59090);
while (isRunning()) {
Socket clientSocket = null;
clientSocket = serverSocket.accept();
// create each thread for client
Thread listener = new Thread(new ClientHandler(clientSocket));
listener.start();
textAreaLog.append("
" + "Thread Listering: " + listener.getName() + "
");
}
} catch (IOException ex) {
textAreaLog.append("Exception server handler: " + ex.getMessage());
Thread.currentThread().interrupt();
}
}
}
question from:
https://stackoverflow.com/questions/65896392/java-thread-address-already-in-use-net-bind 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…