0

rtp オーディオをピア コンピューターに送信し、同時にスレッドを実行して ping データを取得するプログラムを実装しています。開始ボタンをクリックすると、2 つのメソッドがほぼ同時に開始されます。問題は、プログラムを中断/終了したいときです。ping データには出力が表示されませんが、スレッドはまだ実行されています。

スタートボタン

JButton startCap = new JButton("Start");
    startCap.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent act) {

                            go();//go() is the rtp audio method

                        Thread pinging = new Thread() {
                            public void run() {

                                PingTest();
                            }
                        };

                        pinging.setName("runPing");
                        pinging.start();

        }
    });

終了ボタン

JButton stopCap = new JButton("Exit");
    stopCap.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent act) {
                            //just for some checking, I know its not a good design
                            //I new at here
            if (sink != null) {
                sink.addDataSinkListener(new DataSinkListener() {
                    public void dataSinkUpdate(DataSinkEvent e) {
                        if(e instanceof EndOfStreamEvent)
                            sink.close();
                    }
                });
            }
            if (processor != null)
                processor.stop();
                            System.exit(-1);
                            //I think there no need to return, but still put at there
                            Thread.currentThread().interrupt();//preserve the message
                            pinging.currentThread().interrupt();
                            return;//
                            //Runtime.getRuntime().halt(0);
                            //pinging.stop();
                            }

    });

いくつかの GUI コード

public static void createAndShowGui() {
    JFrame frame = new JFrame("Sender");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new SimpleVoiceTransmiter());
    frame.setSize(200, 75);
    frame.setVisible(true);
    frame.toFront();
}

public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGui();
        }
    });
}

go() がメイン メソッドで、PingTest() が従属メソッドです。「開始」ボタンをクリックして go() を開始すると、PingTest() が開始されます。問題は、PingTest() を中断/終了する方法がわからないことです。すべてのスレッド (PingTest()) を同時に中断/終了するにはどうすればよいですか? 本当にいくつかのヒントが必要です。上級者に感謝します。

p/s: PingTest() は、Runtime.exec() を使用してピア コンピューターに ping を実行しています。

4

1 に答える 1

1

pinging.currentThread()ping スレッドを返しません。は静的メソッドであるためThread.currentThread()、と同等です。currentThread()ping スレッドを取得するには、次を使用しますpinging

pinging.interrupt();

現在のスレッドを中断する理由もよくわかりません。現在のスレッドは、GUI を実行しているイベント ディスパッチ スレッドです。中断する理由はありません。

于 2013-03-03T09:24:10.070 に答える