我正在修改我的Search
程序以使用SwingWorker
. 原始代码(main
如下所示)有一个Thread
被调用main
并从给定节点“遍历文件树”的代码:
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
gui = new GUI();
Utilities.disable(GUI.btnStop);
}});
t = new Thread(new TASK());
taskStarted = false;
}
}
这是原始的类标题TASK
:
public class TASK extends SimpleFileVisitor<Path> implements Runnable{
但是为了使用SwingWorker
,(我假设)我需要TASK extends SwingWorker
,使原始run
命令非法(错误:run
在final
)SwingWorker
。
这是原文run
:
public void run()
{
SearchyGUI.disposition = FileVisitResult.CONTINUE;
Files.walkFileTree(path , this);
}
由于我不能使用run
,所以我在类的初始化上方编写了代码,TASK
如下所示:
public class TASK implements SwingWorker implements FileVisitor<Path> {
public void TASK()
{
System.out.println("Here we are starting TASK...");
SearchyGUI.disposition = FileVisitResult.CONTINUE;
Files.walkFileTree(path , this);
}
但是现在main
下面的行会导致错误(没有合适的构造函数,因为现在 TASK 没有实现可运行的......):
t = new Thread(new TASK());
如果我只是说new TASK();
GUI 显示,但是当我单击“搜索”按钮时,什么也没有发生。没有文件步行。没有错误。的输出TASK
甚至没有显示。所以没有机会调用SwingWorker
. (事实上,只是为了看看会发生什么[什么],我把它从类头中删除了TASK
: public class TASK /*extends SwingWorker*/ implements FileVisitor<Path>
。)
如果有什么明显的错误,我很乐意看到。如果没有,我会花很长时间制作一个SSCCE
.