程序不执行线程

时间:2013-11-09 22:34:09

标签: java multithreading

所以我有两个文件,第一个是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

是否存在阻止我的线程运行或我做错了什么的事情?

4 个答案:

答案 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();创建线程的实例,对象并启动它。