0

OptionPanel がスレッド自体をシャットダウンするようにしたいと思います。スレッド クラスの run メソッドで実行する必要があることはわかっていますが、そこで何かを同期する必要があるかどうかはわかりません。

JOptionPanelで正しいオプションをクリックした後、これらのスレッドがシャットダウンするようにするにはどうすればよいですか?

import javax.swing.JOptionPane;

public class Wat extends Thread {
    private char c;
    private int interv;
    private volatile boolean running = true;

    public Wat(char c, int interv) {
        this.c = c;
        this.interv = interv;
    }

    public void run() {

        while (running) {
            try {
                System.out.println(c);
                Thread.sleep(interv * 100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) {
        Wat w1 = new Wat('A', 3);
        Wat w2 = new Wat('B', 4);
        Wat w3 = new Wat('C', 5);
        w1.start();
        w2.start();
        w3.start();
        Object[] options = { "Shutdown A", "Shutdown B", "Shutdown C" };
        int option;
        while (w1.isAlive() || w2.isAlive() || w3.isAlive()) {
            option = JOptionPane.showOptionDialog(null,
                    "Which one would you like to shut?", "Threads",
                    JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, options, options[2]);
            switch (option) {
            case JOptionPane.YES_OPTION:
                w1.running = false;
                break;
            case JOptionPane.NO_OPTION:
                w2.running = false;
                break;
            case JOptionPane.CANCEL_OPTION:
                w3.running = false;
                break;
            }
        }

    }

}
4

1 に答える 1

2

あなたが持っていると仮定すると:

Thread.sleep(interv * 100);

各スレッドに割り込みを送信することを検討します。割り込みはsleep()メソッドに対してまさにそれを行い、ブール値をループする通常の方法よりも応答性が高くなります (例: while (!done) {....})。

上記のリンク先のチュートリアルと同様に、InteruptedExceptions の処理に関するこの DeveloperWorks の記事を確認してください。

于 2012-11-05T17:52:20.283 に答える