我正在制作一个简单的聊天 GUI,我已经编写了服务器和 GUI 客户端,我可以从客户端 GUI 向服务器发送消息。
我的问题是从框架上的服务器接收消息。
当我使用无限循环时,框架被锁定。我不知道应该如何拆分该内容才能在 JTextArea
上显示任何消息。
我的问题是:
有没有办法分割帧来处理来自服务器的“发送”和“接收”信息?
我的 GUI 由 JTextField
、JTextArea
和 JButton
组成。
当按下JButton
时,JTextField
中的文本将通过以下方式发送到服务器:
String u = jTextField.getText();
out.writeUTF(u);
但我不知道我应该做什么来让 JTextArea
减少获取即将到来的信息的时间:
msg = in.readUTF();
jta.append(msg + "\n");
//
线程是否应该是 GUI 类中的类或组件,因为我已经创建了线程,所有东西似乎都在工作,但按摩没有出现在 jTextField
上。我像在服务器中一样在同一文件中创建了线程,但无法正常工作:
class bacgroundTask extends Thread{
static String msg;
static JTextArea jta;
static DataInputStream in;
public void run(){
while(true){
try{
msg = in.readUTF();
jta.append(msg + "\n");
}
catch(IOException ioe){}}}}
//
嗨,又是我,我尝试使用 invokelater 方法,但执行时帧卡住,我无法单击发送按钮或在 jtextfield
中输入文本。任何人都可以向我解释一下这些方法,以及它们对我的情况是否正确。
我尝试过使用和不使用 while 语句。
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
while(true){
try{
msg = in.readUTF();
jta.append(msg + "\n");
jta.revalidate();
}
catch(IOException ioe){
}}}});
最佳答案
您需要在后台线程上运行无限接收循环。
关于java - 如何处理两个不同的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651107/