JLabel和JTextField setText未更新

时间:2014-12-22 14:18:12

标签: java swing jlabel jtextfield

我想用setText()方法更新jlabel和jtextfield,但它不起作用。但是,其余代码正在运行。代码如下;

btnDosyaSe.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser jfc = new JFileChooser();
                jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

                int kullaniciSecimi = jfc.showOpenDialog(null);
                if (kullaniciSecimi == JFileChooser.APPROVE_OPTION) {
                    File fileName = jfc.getSelectedFile();
                    textField.setText(fileName.getPath());
                    islemSureci.setText("Veriler Okunuyor...");

                    try {

                        ArrayList<ArrayList<String>> tumYazılar = rwd.readTXT(fileName.getPath());
                        String[] yazarlar = rwd.yazarlar(fileName.getPath());
                        islemSureci.setText("Veriler Okundu! Öznitelik çıkarımına başlandı...");

                        oznitelikler = oc.oznitelikleriBul(tumYazılar, yazarlar);
                        islemSureci.setText("Öznitelikler Çıkarılmıştır!");
                        //String text = readTXT(fileName);

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        });

在这里,islemSureci是JLabel,textFiled是JTextField。当它们被设置时,它不起作用。完成代码中的所有工作后,它们就会出现。请问你能说出原因是什么吗?

3 个答案:

答案 0 :(得分:3)

您的长时间运行任务在Event Dispatcher Thread中执行,该线程锁定应该执行更新的线程。因此,只有在任务完成后才会执行真正的更新。

在SwingWorker中运行

参见例如

http://www.javacreed.com/swing-worker-example/

How do I use SwingWorker in Java?

答案 1 :(得分:1)

我认为你的意思是“完成所有工作后”正在从文件中加载文本(您评论的行)。我认为这段代码工作正常,因为您在设置文本后没有做任何事情。 如果是,则可以使用另一个线程来加载文本。

如果 oc.oznitelikleriBul()需要很长时间,您可以在不同的线程中编写该行和文本设置行。但是,在这种情况下,请确保在新主题内的EDT中运行文本设置行。

答案 2 :(得分:0)

我有同样的问题。我如何解决,见下文:

我有2个JFrame类。 Login.java和Employee.java。登录后,我无法在Employee Form中将Text()设置为JTextField对象。所以我做了...我使用setVisible()员工表单和这段代码。现在我可以刷新我的JTextField。

谢谢,我希望它能解决问题。

java.awt.EventQueue.invokeLater(new Runnable() {
   public void run() {
        new Employee().setVisible(true);
   }
});