Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-SwingWorker-problem in process()方法_Java_Swing_Swingworker_Edt - Fatal编程技术网

Java-SwingWorker-problem in process()方法

Java-SwingWorker-problem in process()方法,java,swing,swingworker,edt,Java,Swing,Swingworker,Edt,我第一次使用了javax.swing.SwingWorker 我想根据swing worker发布的临时结果更新JLabel,如下所示: publish("Published String"); 现在,为了更新JLabel,我编写了以下代码: process(List<String> chunks) { if (chunks.size() > 0) { String text = chunks.get(chunks.size() - 1);

我第一次使用了
javax.swing.SwingWorker

我想根据swing worker发布的临时结果更新
JLabel
,如下所示:

publish("Published String");
现在,为了更新
JLabel
,我编写了以下代码:

process(List<String> chunks) {
    if (chunks.size() > 0) {
        String text = chunks.get(chunks.size() - 1);
        label.setText(text);
    }
}
过程(列表块){
if(chunks.size()>0){
String text=chunks.get(chunks.size()-1);
label.setText(文本);
}
}
上述代码有效,但我的问题(或者更具体地说,我的疑问)如下:

publish("Published String");
上面的swing worker任务是一个注释性的内部类,因此它可以访问
label
字段

但是,如果我想让swing worker类成为非内部类呢。我是否需要将
label
作为参数传递给swing worker类的构造函数,以便process()方法可以访问

或者还有别的办法吗

当swing worker类不是内部类时,其他开发人员采用什么方法从swing worker类的结果更新UI组件

但是如果我想去荡秋千呢 工人类是非内部类。应该 我需要将标签作为参数传递给 swing worker类的构造函数 这样process()方法就可以 进入

那很好。从:

类PrimeNumbersTask扩展
摇摆工人{
PrimeNumberTask(JTextArea textArea,int numbersToFind){
//初始化
}
@凌驾
公共列表doInBackground(){
而(!ough&&!isCancelled()){
number=nextPrimeNumber();
出版(编号);
setProgress(100*numbers.size()/numbersToFind);
}
}
返回号码;
}
@凌驾
受保护的无效进程(列表块){
for(整数:块){
textArea.append(数字+“\n”);
}
}
}
JTextArea textArea=新的JTextArea();
最终JProgressBar progressBar=新的JProgressBar(0,100);
PrimeNumberTask任务=新PrimeNumberTask(文本区域,N);
task.addPropertyChangeListener(
新属性ChangeListener(){
公共作废属性更改(属性更改事件evt){
if(“progress”.equals(evt.getPropertyName())){
progressBar.setValue((整数)evt.getNewValue());
}
}
});
task.execute();
注意构造函数
PrimeNumbersTask(jtextareatextarea,int numbersToFind)
。他们通过
JTextArea
进行更新