2016-11-05 3 views
0

나는 타이머를 멈추고 불행히도 운이 없다 며칠 동안 이것을 풀려고 노력했다. 누군가가 도움을 줄 수 있기를 바란다.스윙 타이머 문제 - 타이머 정지

아이디어는 타이머를 사용하여 텍스트 필드의 값을 증가시키는 버튼을 클릭하여 시작 버튼에 타이머가 있고 정지 버튼에서 타이머를 멈추고 싶습니다.

private void btStartTimerActionPerformed(java.awt.event.ActionEvent evt) { 

     javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener(){ 
      public void actionPerformed(ActionEvent evt) { 

       btAddOneActionPerformed(evt); 
       } 
     }); 
tm.start(); 

}

private void btStopTimerActionPerformed(java.awt.event.ActionEvent evt) { 

} 
+1

더 도움 들어, [최소 완료하고 검증 가능한 예제 프로그램 (http://stackoverflow.com/help/mcve) 작성 및 게시 고려하십시오. 우리는 전체 프로그램을보고 싶지는 않지만 코드를 컴파일하면서 가장 작은 비트로 압축해야하며 문제와 관련이없는 추가 코드가 없지만 여전히 문제를 보여줍니다. 버그를 격리하고 노출하기 만하면 문제를 직접 해결할 수 있습니다. –

답변

1

당신은 당신의 게시 된 코드에서 범위의 문제가 생겼어요 : 당신의 타이머 변수, TM, 선언 내 시작 버튼 뒤에있는 코드의

시작 버튼의 actionPerformed 메서드 내에서 은 해당 메서드 내에서만 볼 수 있습니다. 그 방법 밖에있을 때 당신은 그것에 대한 실행 가능한 참조를 얻을 수 없습니다. 해결 방법은 클래스 수준의 변수를 비공개 인스턴스 (비 정적) 변수로 선언하고 시작 버튼의 액션 리스너 내에서 start() 만 호출하면됩니다. 이렇게하면 클래스 전체에 변수가 표시되고 중지 버튼의 수신기는 메소드를 호출 할 수 있어야합니다.

예를 들어,

package pkg3; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.Timer; 

public class TimerDeclaration { 
    private static final int DELAY = 1000; 

    // the tm2 variable is visible throughout the class 
    private Timer tm2 = new Timer(DELAY, new TimerListener()); 

    private JButton btStartTimer1 = new JButton("Start Timer 1"); 
    private JButton btStartTimer2 = new JButton("Start Timer 2"); 

    public TimerDeclaration() { 
     btStartTimer1.addActionListener(e -> btStartTimer1ActionPerformed(e)); 
     btStartTimer2.addActionListener(e -> btStartTimer2ActionPerformed(e)); 
    } 

    private void btStartTimer2ActionPerformed(ActionEvent e) { 
     tm2.start(); // tm2 is visible throughout your program 
    } 

    private void btStartTimer1ActionPerformed(ActionEvent e) { 
     javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 

       // btAddOneActionPerformed(evt); 
      } 
     }); 
     tm.start(); // this is only visible inside here!!! 
    } 

    private class TimerListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 
} 
+0

예를 볼 수 있습니까? –

+0

@Jamesanderson : 물론. [이 링크들] (http://stackoverflow.com/search?q=user%3A522444+swing+timer)과 [Swing Timer tutorial] (http://docs.oracle.com)을보십시오. /javase/tutorial/uiswing/misc/timer.html) –

+0

내 코드 내에서 어떻게 보이는지 보여 주시겠습니까? , 내가 문제가된다면 미안해. –