ソケットTCP/IPとGUIを使用するJavaアプリケーションがあります。サーバーは常に接続をリッスンし、クライアントからのメッセージを受信します。サーバーがメッセージを受信すると、スイングフォームが表示されます。 閉じるボタンをクリックすると問題が発生しますが、サーバーソケットを常に設定していますが、アプリケーションは停止します(メソッドserverSocket.accept()
をループwhile(true)
に入れて接続します)。 どうすれば問題を解決できますか?ここでネットワークスレッドとスイングスレッドの問題
は、サーバー上の私のコードです: パブリッククラスTCPServerの{
ServerSocket server = null;
BufferedReader in;
PrintWriter out;
Socket client = null;
//open serverSocket
public void openServer() {
try {
server = new ServerSocket(1234);
} catch (Exception e) {
e.printStackTrace();
}
}
//accept connection and read data
public void listening() {
try {
while (true) {
client = server.accept();
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
//read data from stream
String s = in.readLine();
System.out.println("String receive: " + s);
new NewJFrame().setVisible(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void closeServer() {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (client != null) {
client.close();
}
if (server != null) {
server.close();
}
} catch (Exception e) {
}
}
public static void main(String arg[]) {
TCPServer server = new TCPServer();
server.openServer();
server.listening();
server.closeServer();
}
}
はクローズイベント – Blitzkr1eg
を処理するコードは、あなたが私たちにNewJFrameコードを表示することができます示して?閉じるボタンが押されたときに 'System.Exit'をやっていないのですか?スタックトレースを取得しますか? – GETah
閉じるボタンがウィンドウに表示されます。私は次のように設定します:setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); – PhiVH