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 を実行しています。