[英]NetBeans - Need assistance in updating jProgressBar from autogenerated code
(忽略下面的句子-我很笨)。 我有一种感觉,我正在EDT上调用jProgressBar的更新(我知道这是错误的)。
@Action
public Task launchScenario() {
return new LaunchScenarioTask(getApplication());
}
private class LaunchScenarioTask extends org.jdesktop.application.Task<Object, Void> {
LaunchScenarioTask(org.jdesktop.application.Application app) {
super(app);
launchTestCaseButton.setEnabled(false);
progressBar.setIndeterminate(false);
statusPanel.validate();
statusPanel.repaint();
totalTests = scenarioRepeat * selectedSSIDS.length;
setProgress(0);
}
@Override
protected Object doInBackground() {
currentScenario = 1;
progressBar.setMaximum(totalTests);
progressBar.setMinimum(0);
try {
Thread.sleep((long) 500);
} catch (InterruptedException ignore) {
}
int ssidsToTest = selectedSSIDS.length;
//For every SSID, we iterate through and create an autoconnector object
for (int counter = 0; counter < ssidsToTest; counter++) {
try {
setMessage("Preparing " + selectedSSIDS[counter] + " test case...");
Thread.sleep((long) 2000);
} catch (InterruptedException ignore) {
}
setMessage("Launching ");
AutoConnector ac = new AutoConnector(selectedSSIDS[counter]);
for (int i = 0; i < scenarioRepeat; i++) {
if (ac.connected()) {
setMessage("Running test " + currentScenario + "/" + totalTests);
currentScenario++;
passedTests++;
} else {
currentScenario++;
failedTests++;
}
System.out.println("setting progress");
setProgress((currentScenario / totalTests) * 100);
progressBar.setString((currentScenario / totalTests) * 100 + "% complete");
}
}
try {
Thread.sleep((long) 500);
} catch (InterruptedException ignore) {
}
return null; // return your result
}
@Override
protected void succeeded(Object result) {
launchTestCaseButton.setEnabled(true);
setMessage("Complete. " + passedTests + " tests passed and "
+ failedTests + " tests failed.");
}
}
我知道一个事实(感觉有点不好),我在doInBackground()
方法中调用更新( setProgress()
和setMessage()
doInBackground()
,并且我有一个偷偷摸摸的怀疑,我不应该这样。
所以问题是,我应该在代码中的哪里放置setProgress()
代码片段? 这会要求我使用AutoConnector
类创建任务并查看是否可以从那里更新jProgressBar吗?
我以前使用过jProgressBars,但在NetBeans中却没有使用过这种方式。
您的问题与问题开始时所说的相反。 您声明:
我有一种感觉,我正在EDT上调用jProgressBar的更新(我知道这是错误的)。
恰恰相反。 在所有JProgressBar的更新应该在美国东部时间进行,你正在做的正好相反。 您不应在SwingWorker的doInBackground(...)
方法doInBackground(...)
JProgressBar上调用任何方法。
而是考虑
我本人更喜欢将PropertyChangeListener添加到我的SwingWorker(在EDT上),并从此侦听器中更新JProgressBar。 我认为,与第一种选择相比,它可以实现更好的代码分离,并具有更低的耦合度和更高的内聚性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.