Swingworker没有运行doInBackground()方法

时间:2015-06-26 15:07:43

标签: java swingworker

我有一个jtextfield,我在其中输入计算机名称的一部分,当我点击搜索时,它给了我完整的计算机名称。我的问题是完整的计算机名称应该输出到jLabel,但只有在我运行GUI的另一个实例时它才会输出。我知道我必须使用Swingworker来输出(搜索按钮)按钮单击,但它永远不会在同一个实例中输出。任何帮助表示赞赏。

我不想错过我列出的代码中的任何内容,所以这里是我正在尝试使用SwingWorker的完整类。 doInBackground()方法位于类的底部。我试图输出计算机名称的jLabel称为“testLabel”

 final Pattern PATTERN = Pattern.compile("CN=([^,]+).*");
            try {
                while ((sCurrentLine = br.readLine()) != null) {

                    String[] tokens = PATTERN.split(","); //This will return you a array, containing the string array splitted by what you write inside it.
                    //should be in your case the split, since they are seperated by ","
                   // System.out.println(sCurrentLine);
                    CN = sCurrentLine.split("CN=",-1)[1].split(",",-1)[0];

                    System.out.println(CN);
                   testLabel.setText(CN);
                }


            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            } catch (IOException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
         SwingUtilities.invokeLater(updateCN());

课程底部的代码

private Runnable updateCN() {
         testLabel.setText("Test afterwards");
        return null;

1 个答案:

答案 0 :(得分:0)

应该在事件调度线程中执行对GUI的任何更新。并且SwingWorker.doInBackground()在后​​台线程(非EDT)中执行任务。所以你好像把它搞混了。

要解决此问题,请始终通过调用SwingUtilities.invokeLater()SwingUtilities.invokeAndWait()在EDT主题中执行setText。如果您想要执行一个不会从EDT更新GUI的长时间运行过程,请使用SwingWorker.doInBackground()

此外,仅当您调用doInBackground()时,才会调用SwingWorker.execute()方法,而您似乎在代码中的任何位置都没有这样做。