2

2 つのファイルがあります。1 つ目はスイング クラスで、2 つ目はスレッド クラスです。何らかの理由でスレッドを実行すると、実行されないため、いくつかの印刷ステートメントを配置して、プログラムがそこに到達するかどうかを確認しようとしましたが、どれも実行されませんでした。

私のスレッドクラス

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:

を保持CheckFilesRunnable、最後の行をに変更します

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

現時点では、クラスを Runnable にしただけです。スレッドを作成して開始する必要があります。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!であるはずのクラスのインスタンスを作成しました。実際に a を宣言しThreadて開始する必要があります。たとえばnew Thread(new CheckFiles()).start();、スレッドのインスタンス、オブジェクトを作成して開始します。

于 2013-11-09T22:45:53.693 に答える