문제는 : 나는 스윙 응용 프로그램이 있습니다. 2 btns ("시작", "중지")와 함께 하나의 양식. 이 btns에서 스레드 클래스가있는 ActionListener를 내부에 추가했습니다.자바 스윙 다중 스레드
새 스레드에서 시작하려면 btn "시작"을 클릭하고 btn "정지"를 클릭하면 해당 작업이 종료됩니다. 이 코드는 콘솔에서 잘 작동하지만 스윙 doest에서는 비슷합니다. 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.)
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);
}
}
live는 volatile로 선언하는 것이 좋습니다. –