问题描述
我有一个简单的聊天应用程序,它有两个窗口,一个是客户端,另一个是服务器,目的是通过数据包来回发送消息。但是,初始化后,屏幕将变黑且没有响应。调用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 (将#修改为@)