无法在jTextField中显示数据

use*_*881 4 java sockets swing jtextfield event-dispatch-thread

我正在编写套接字编程.它具有服务器和客户端的GUI.在服务器GUI中有一个文本字段,显示用户请求的单词.但我在表达这个词时遇到了问题.

我试过了

txtWord.setText(sentword);
Run Code Online (Sandbox Code Playgroud)

它没有在文本字段中显示该单词.但是当我写这个

txtWord.setText(sentword);
JOptionPane.showMessageDialog(null, "the requesed word is: "+sentword);
Run Code Online (Sandbox Code Playgroud)

然后它会在文本字段中显示该单词,并在消息框中显示该单词.

我尝试过repaint()但是它有效.请尽快给我一些解决方案

mKo*_*bel 9

正如@BinyaminSharet正确评论的那样,你在Swing问题上有一个并发.

  • Swing GUI并不关心你在后台运行的漫长而艰巨的任务

  • even JTextField#setText()声明为线程安全,Socket默认情况下从(ie)输出从未通知Event Dispatch Thread

  • 正确的方法可能是使用专门为Swing GUI运行长和硬任务背景并在事件线程或EDT上输出到GUI 的SwingWorker

  • 或者更简单的是在a Runnable中使用a Thread但确保所有输出Swing GUI都在Swing事件线程上排队,方法是将它放在Runnable中并用它调用它invokeLater()

  • 一个脏的黑客是包装代码行,如下所示:

txtWord.setText(sentword);
JOptionPane.showMessageDialog(null, "the requesed word is: "+sentword);
Run Code Online (Sandbox Code Playgroud)

进入invokeLater(),但在这种情况下,您的GUI将无响应MouseKeyboard事件,直到Socket(在您的情况下)结束