我有一个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;
答案 0 :(得分:0)
应该在事件调度线程中执行对GUI的任何更新。并且SwingWorker.doInBackground()
在后台线程(非EDT)中执行任务。所以你好像把它搞混了。
要解决此问题,请始终通过调用SwingUtilities.invokeLater()
或SwingUtilities.invokeAndWait()
在EDT主题中执行setText。如果您想要执行一个不会从EDT更新GUI的长时间运行过程,请使用SwingWorker.doInBackground()
。
此外,仅当您调用doInBackground()
时,才会调用SwingWorker.execute()
方法,而您似乎在代码中的任何位置都没有这样做。