2

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

4 回答 4

2

您正在创建一个可用于启动线程的类,但您并没有启动它。

几种解决方案是可能的:

解决方案1:

更改类型以扩展Thread

class CheckFiles extends Thread {
    ...
}

并将最后一行更改为

(new CheckFiles()).start();

解决方案2:

保留CheckFilesa Runnable,并将最后一行更改为

(new Thread(new CheckFiles())).start();
于 2013-11-09T22:36:13.157 回答
1

目前,您只使您的课程可运行。您需要创建并启动您的线程。请查看http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html

Thread t = new Thread(new CheckFiles());
t.start();

扩展 Thread 和实现目标 Runnable 之间的主要区别在于,在扩展 Thread 时,您将 Thread 与您正在创建的对象相关联。通过使您的对象可运行,您可以将您的线程与许多可运行对象相关联。

于 2013-11-09T22:37:40.407 回答
1

你不应该让类扩展线程,而应该做类似的事情

Thread t = new Thread(new CheckFiles());
t.start();
于 2013-11-09T22:39:11.590 回答
1

您刚刚创建了一个应该是Thread! 您必须实际声明 aThread并启动它。例如new Thread(new CheckFiles()).start();,创建线程、对象的实例并启动它。

于 2013-11-09T22:45:53.693 回答