所以我有两个文件,第一个是swing类,第二个是我的线程类。当我运行我的线程由于某种原因它没有运行时,我尝试通过放置一些打印语句来查看我的程序是否会到达那里,但它们都没有运行。
我的主题类
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
class CheckFiles implements Runnable {
public void run() {
while (!UserInterface.stop) {
try {
String line;
BufferedReader b = new BufferedReader(new FileReader(UserInterface.location));
while((line = b.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) { System.out.println(e); }
}
}
}
在我的 UserInterface 类中,我通过执行以下操作启动方法
System.out.println(stop); //prints true
loadFile.setEnabled(false); //not important
status.setText("Checking Files"); //not important
stop = false;
System.out.println(stop); //prints false
new CheckFiles(); //start thread
是否存在阻止我的线程运行或我做错了什么的事情?
答案 0 :(得分:2)
您正在创建一个可用于启动线程的类,但您没有启动它。
可能有几种解决方案:
解决方案1:
将类型更改为扩展Thread
class CheckFiles extends Thread {
...
}
并将最后一行更改为
(new CheckFiles()).start();
解决方案2:
保持CheckFiles
一个Runnable
,并将最后一行更改为
(new Thread(new CheckFiles())).start();
答案 1 :(得分:1)
目前你只让你的班级Runnable。您需要创建并启动您的线程。请查看http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html。
Thread t = new Thread(new CheckFiles());
t.start();
扩展Thread和实现目标Runnable之间的主要区别在于,在扩展Thread时,您将Thread与您正在创建的对象相关联。通过使对象可运行,您可以将Thread与许多可运行对象相关联。
答案 2 :(得分:1)
你不应该让类扩展线程,而是做类似
的事情Thread t = new Thread(new CheckFiles());
t.start();
答案 3 :(得分:1)
您刚刚创建了一个应该是Thread
的类的实例!您必须实际声明Thread
并启动它。例如new Thread(new CheckFiles()).start();
创建线程的实例,对象并启动它。