下面是一个 SwingWorker 实例,它没有像我预期的那样更新 Java GUI。
SwingWorker 在按钮的动作侦听器中实现。定义循环的min
andmax
都是动作监听器本地的“final int”。
SwingWorker 应该在每次迭代时调用NQueens
对象的 go() 方法,该方法递归地找到 n-queens 的所有解决方案。然后调用NQueens
对象的,然后toString()
发布字符串,以便 process() 方法将更新jProgressBar
和jTextArea
。但是,按下按钮时没有任何反应。这是我应该如何实施结合 GUI 组件更新的密集流程吗?
new SwingWorker <Void,String>()
{
private int totalPercent;
@Override
protected Void doInBackground()
{
int diff = max - min + 1;
int percent = 100;
if(diff != 0)
{
percent = 100/diff;
}
totalPercent = 0;
NQueens queens = new NQueens(min);
for(int j = min; j <= max; j++)
{
queens.go();
totalPercent += percent;
String newText = queens.toString();
publish(newText);
queens.nextSet();
}
isCalced = true;
return null;
}
protected void process(String results)
{
jTextArea2.append(results);
jProgressBar1.setValue(totalPercent);
jProgressBar1.repaint();
}
}.execute();