如何解决从DatagramPackets调用receive方法时,GUI应用程序黑屏
我有一个简单的聊天应用程序,它有两个窗口,一个是客户端,另一个是服务器,目的是通过数据包来回发送消息。但是,初始化后,屏幕将变黑且没有响应。调用DatagramPackets的receive()
方法时,似乎发生了错误。我还发现,当我删除EventQueue.invokeLater()
方法时,应用程序这次没有变成黑屏,但是GUI组件没有正确加载。
public class server {
private JFrame frame;
private JFrame frmServer;
private JTextArea textArea;
private JTextField textField;
private DatagramSocket socket;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
server window = new server();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
* @throws IOException
*/
public server() throws IOException {
initialize();
}
/**
* Initialize the contents of the frame.
* @throws IOException
*/
private void initialize() throws IOException {
frmServer = new JFrame();
frmServer.setVisible(true);
frmServer.setTitle("Server");
frmServer.setBounds(100,100,450,300);
frmServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmServer.getContentPane().setLayout(null);
textField = new JTextField();
textField.setBounds(39,199,260,37);
frmServer.getContentPane().add(textField);
textField.setColumns(10);
JTextArea textArea = new JTextArea();
textArea.setBorder(new EtchedBorder(EtchedBorder.LOWERED,null,null));
textArea.setEditable(false);
textArea.setBounds(39,11,356,166);
frmServer.getContentPane().add(textArea);
JButton btnNewButton = new JButton("Send");
btnNewButton.setBounds(309,86,37);
frmServer.getContentPane().add(btnNewButton);
backgroundTasks(textField,textArea);
}
private void backgroundTasks(JTextField textField,JTextArea textArea) throws IOException {
socket = new DatagramSocket(2223);
System.out.println("[Server] Server launched successfully");
//receiving packets from client and sending to client
int bufferValue = 500;
byte[] buffer = new byte[bufferValue];
DatagramPacket datagramPacket = new DatagramPacket(buffer,buffer.length);
while(true) {
socket.receive(datagramPacket);
//this part only executes after client sends packet
byte[] received = datagramPacket.getData();
String rc = received.toString();
textArea.setText(rc);
}
}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。