java - 无法在 jTextField 中显示数据

标签 java swing sockets jtextfield event-dispatch-thread

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

我试过了

txtWord.setText(sentword);

它没有在文本字段中显示单词。但是当我写这个的时候

txtWord.setText(sentword);
JOptionPane.showMessageDialog(null, "the requesed word is: "+sentword);

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

我试过 repaint() 但它不起作用。 请尽快给我一些解决方案

最佳答案

作为 @Binyamin Sharet 正确评论,你有一个 Concurrency in Swing问题。

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

  • 甚至 JTextField#setText() 被声明为线程安全的,Socket 的输出(即)默认情况下从不通知 Event Dispatch Thread

  • 正确的方法是使用 SwingWorker专门为在 Swing GUI 后台运行长期而艰巨的任务而创建,并在事件线程或 EDT 上输出到 GUI

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

  • 调用它
  • 一个肮脏的 hack 是像这样包装代码行:

txtWord.setText(sentword);
JOptionPane.showMessageDialog(null, "the requesed word is: "+sentword);

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

关于java - 无法在 jTextField 中显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550098/

相关文章:

java - 是否有更简单的方法来移动数组中的对象以使它们相邻?

java - Libgdx,我可以在 Body 中附加动画吗?

python-3.x - 为什么python选择器模块没有套接字错误事件

python - Python 中的套接字问题

java - 使用我自己的对象作为 TreeMap 中的键

java - 具有有界通配符类型的数字列表列表

java - Java Swing 中创建两个标题(使用 TitledBorder)时 AddDocumentListener 的变量作用域

java - JButton 数组 ActionListener 值

java - 将 JCheckBox 添加到 JTable 中

c - 如何正确重用套接字来发送UDP数据包?