問題は:私はスイングアプリを持っています。2つのbtns( "Start"、 "Stop")を持つ1つのフォームのみ。これらのbtnsに、スレッドクラスを内部に持つActionListenerを追加しました。
btnの[開始]をクリックすると新しいスレッドで作業を開始し、btnの[停止]をクリックするとその作業を終了したいと思います。これに少し似たコードはコンソールでは問題なく機能しますが、スイングでは機能しません。助けていただければ幸いです。前もって感謝します。)。
class Action implements ActionListener{
class MyThread extends Thread{
boolean live = true;
@Override
public void run() {
while(live)
System.out.println("doing...");
}
public void shutDown(){
live = false;
}
}
@Override
public void actionPerformed(ActionEvent e) {
JButton source = (JButton) e.getSource();
MyThread t = new MyThread();
switch (source.getText()) {
case "Start":
t.start();
break;
case "Stop":
t.shutDown();
break;
}
そして、その単純な形
public class App extends JFrame {
public static void main(String[] args) {
App app = new App();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
JButton btn1 = new JButton("Start");
JButton btn2 = new JButton("Stop");
app.getContentPane().add(btn1, BorderLayout.WEST);
app.getContentPane().add(btn2, BorderLayout.EAST);
Action action = new Action();
btn1.addActionListener(action);
btn2.addActionListener(action);
}
}