Java JTextField加载

Java JTextField加载,java,swing,jpanel,jtextfield,joptionpane,Java,Swing,Jpanel,Jtextfield,Joptionpane,我有个问题。。 在我的代码中,我有它,所以文本应该输出到JTextField。当我运行程序时,它不会。但是,如果我在将文本放入JTextField的代码之后直接放入一个JOptionPane,那么它就可以工作了 有没有人有一个解决方案可以在不使用JOptionPane的情况下更新JTextField 我的代码: // Works: JTextField.setText("String"); JOptionPane.showMessageDialog(null, "String"); // Do

我有个问题。。 在我的代码中,我有它,所以文本应该输出到JTextField。当我运行程序时,它不会。但是,如果我在将文本放入JTextField的代码之后直接放入一个JOptionPane,那么它就可以工作了

有没有人有一个解决方案可以在不使用JOptionPane的情况下更新JTextField

我的代码:

// Works:
JTextField.setText("String");
JOptionPane.showMessageDialog(null, "String");

// Doesn't Work:
JTextField.setText("String");
//JOptionPane.showMessageDialog(null, "String");

这可能失败的原因有两个:

  • 您正在从主(Swing)线程外部调用
    setText()
  • 您正在从主(Swing)线程中调用
    setText()
  • 在第一种情况下,将调用包装在
    SwingUtilities.invokeLater()

    在后一种情况下,您设置了文本,但阻塞了Swing线程,因此无法呈现更改。您需要创建一个后台工作线程来完成此工作,并使用
    SwingUtilities.invokeLater()
    从工作线程更新文本字段

    [EDIT]有关如何使用后台线程以及如何从后台更新UI的示例,请参见Swing教程:

    为什么不在文本更新后使用repaint()


    如果我没记错的话,那应该解决文本不附加的问题

    给出的例子一开始就太模糊了。您是否在您启动的某个线程的上下文中设置文本?您的代码中有一个bug,您没有向我们展示。我想知道您是否有并发性问题,好像您试图通过调用Thread.sleep()在循环中重复更新JTextField,这就是为什么它没有显示出来,但这只是一个SWAG,直到您告诉我们需要知道的细节。我没有使用任何线程。。。但也许我的框架确实…这里只能猜测。若你们有问题,你们可以在这里找到帮助:。你们的意思是这样吗
    javax.swing.SwingUtilities.invokeLater(new Runnable(){public void run(){JTextField.setText(“将您连接到#TeamZeare作为“+n+”,请稍候可能需要一段时间…”);})只有在后台线程中完成所有工作时,它才起作用。如果阻塞主线程,Swing将永远无法处理事件,也不会发生渲染。用户界面也将被“冻结”。@enjikaka:请不要让我们猜测。请向我们展示更多您的代码,并解释更多您正在做的事情,因为我们中的许多人已经向您提出了要求。我试图使其成为这样,当我在njIRC.class中运行函数runBot()时,它会在Act.class中使用一个名为putInS的函数(字符串n)将Main.java中名为status的JTextField的文本设置为我传入的字符串。@enjikaka:这与此无关。此代码在哪个线程中执行?