2012-03-11 2 views
2

내가 가지고있는 다음과 같은 두 개의 버튼 :클릭 버튼을 자바로 진행하는 과정을 (스레드) 중지

jButton2.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 

      Thread t = new Thread() { 
       public void run() { 
        StreamingExperiment.streamingExperimentMain(); 
       } 
      }; 
      t.setName("runThread"); 
      t.start(); 

     } 
    }); 

jButton3.setText("Cancel"); 
    jButton3.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 

     } 
    }); 

JButton3 실제로 진행 StreamingExperiment을 취소하는 버튼을 취소한다 . 어떻게이 상황에서 진행중인 스레드를 중단해야합니까? 당신은 물론 StreamingExperiment에게 그 내용이 모두 StreamingExperiment가하는 일에 따라 달라집니다이 방법을 제공해야합니다

jButton3.addActionListener(new java.awt.event.ActionListener() { 
    public void actionPerformed(java.awt.event.ActionEvent evt) { 
     StreamingExperiment.stop(); 
    } 
}); 

:

답변

0

은 당신이하는 JButton의 ActionListener를 호출이있을 것이다. 루프가있는 경우 stop()은 루프를 종료하는 데 사용하는 부울을 변경할 수 있습니다.

그런데 StreamingExperiment에는 정적 메서드가있는 것처럼 보입니다.이 메서드는 변수를 나타내는 것이 아니라 클래스를 수정해야 할 수도 있습니다.이 경우 클래스는 이름이 아니라 소문자로 시작해야합니다. .

5

아무 스레드 나 중지 할 수 없습니다. *. interrupting 시도해 볼 수 있습니다 :

t.interrupt(); 

하지만 스레드가 처리 할 수 ​​있어야합니다. 이것은 무엇을 질문을 가져온다 :

StreamingExperiment.streamingExperimentMain(); 

실제로합니까? CPU 집약적 인 작업을 수행하는 경우 스레드는 주기적으로 isInterrupted() 플래그를 확인하고 설정된 경우 종료해야합니다. I/O 또는 대기 상태로 대기하는 경우 이 작동합니다. - InterruptedException을 참조하십시오.

글쎄, 기술적으로는 can이지만이 방법은 이유가 없어졌습니다.