Java GUI 冻结
Java GUI Freezes
我正在尝试创建一个简单的 TCP 客户端服务器应用程序接口
用户可以在按下相应按钮时启动或停止服务器
当用户按下它应该连接到服务器的按钮时,我创建了一个 StartServer Button
面临的问题是当用户单击按钮时出现提示并且界面停止
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
DefaultListModel dlm=new DefaultListModel();
String clientSentence;
String capitalizedSentence;
try {
welcomeSocket= new ServerSocket(6789);
dlm.addElement("server started..");
dlm.addElement("Server Waiting for Connections on Port 6789");
jList1.setModel(dlm);
displayfull();
while(true)
{
DataOutputStream outToClient = null;
try {
Socket connectionSocket = welcomeSocket.accept();
//dlm.addElement("Client Connected ");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
//dlm.addElement("Obtained a handle on Client Input Stream");
outToClient = new DataOutputStream(connectionSocket.getOutputStream());
//dlm.addElement("Obtained a handle on Client Output Stream");
clientSentence = inFromClient.readLine();
//dlm.addElement("Received: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
//dlm.addElement("Message Sent");
} catch (Exception e) {
}
}
} catch (Exception e) {
dlm.addElement(e);
}
jList1.setModel(dlm);
displayfull();
}
正如其他人所暗示的,您正在 Event Dispatch Thread 上花费宝贵的时间。
如果您通读了有关如何操作的教程 Concurrency in Swing you will discover you are given tools like the Swing worker。
Stack Overflow 上有很多这样的问题,有些比其他的更有帮助。
- Java's Swing Threading
- JFrame without Freezing
- Freezing on Database
我正在尝试创建一个简单的 TCP 客户端服务器应用程序接口 用户可以在按下相应按钮时启动或停止服务器 当用户按下它应该连接到服务器的按钮时,我创建了一个 StartServer Button 面临的问题是当用户单击按钮时出现提示并且界面停止
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
DefaultListModel dlm=new DefaultListModel();
String clientSentence;
String capitalizedSentence;
try {
welcomeSocket= new ServerSocket(6789);
dlm.addElement("server started..");
dlm.addElement("Server Waiting for Connections on Port 6789");
jList1.setModel(dlm);
displayfull();
while(true)
{
DataOutputStream outToClient = null;
try {
Socket connectionSocket = welcomeSocket.accept();
//dlm.addElement("Client Connected ");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
//dlm.addElement("Obtained a handle on Client Input Stream");
outToClient = new DataOutputStream(connectionSocket.getOutputStream());
//dlm.addElement("Obtained a handle on Client Output Stream");
clientSentence = inFromClient.readLine();
//dlm.addElement("Received: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
//dlm.addElement("Message Sent");
} catch (Exception e) {
}
}
} catch (Exception e) {
dlm.addElement(e);
}
jList1.setModel(dlm);
displayfull();
}
正如其他人所暗示的,您正在 Event Dispatch Thread 上花费宝贵的时间。
如果您通读了有关如何操作的教程 Concurrency in Swing you will discover you are given tools like the Swing worker。
Stack Overflow 上有很多这样的问题,有些比其他的更有帮助。
- Java's Swing Threading
- JFrame without Freezing
- Freezing on Database