我有一个使用Socket TCP / IP和GUI的java应用程序。服务器始终侦听连接并从客户端接收消息。当服务器收到消息时,它将显示一个swing表单。
我的麻烦是当我点击关闭按钮时,应用程序将停止,虽然我设置服务器套接字ALWAYS侦听连接(通过将方法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();
}
}
答案 0 :(得分:4)
来自Javadoc:
EXIT_ON_CLOSE The exit application default window close operation.
在NewJFrame
课程中,将其删除:setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
这会在关闭按钮时关闭整个应用程序!
将其替换为:
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
这样您就可以确定只处理窗口,而不是整个应用程序
答案 1 :(得分:1)
我们可以猜测你的Dialog有“CLOSE_ON_EXIT”选项设置为直接调用“System.exit()”吗?
如果没有,请提供更多信息。