我是一名学生,正在尝试更多地了解Java开发,目前正在使用swing创建一个简单的客户端/服务器IM应用程序。
让我试着解释一下我遇到的问题:
类Login在启动时运行,在成功通过服务器验证后(工作正常),ClientChat类被实例化。
ClientChat创建一个新的JFrame,与服务器建立新连接并创建新的I / O流。所有这些背景的东西工作正常,但新框架是完全空白的。
如果我在没有Login类的情况下运行应用程序(即直接运行ClientChat),则不会出现此问题。
目前尚未成功的方法:
从登录():
panel.add(userLabel);
panel.add(passLabel);
panel.add(userEntry);
panel.add(passEntry);
panel.add(button);
frame.add(panel, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Chat Room Authentication");
frame.setSize(300, 120);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
...
frame.setVisible(false);
ClientChat clientChat = new ClientChat(serverIP);
clientChat.start();
来自ClientChat():
userText = new JTextField();
chatWindow = new JTextArea();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Logged in as "+user.toUpperCase());
frame.add(userText, BorderLayout.SOUTH);
frame.add(new JScrollPane(chatWindow), BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
答案 0 :(得分:3)
您有一个经典的Swing线程问题,您可以在Swing的事件线程(也称为 E vent 上运行长时间运行的代码D ispatch T hread或 EDT ,通过这样做,您可以防止EDT执行绘制GUI并与之交互的必要任务用户。
解决方案:使用SwingWorker帮助您创建一个后台线程,该线程允许长时间进程不干扰Swing GUI,并允许它与GUI良好通信。
有关详情,请查看:Lesson: Concurrency in Swing。