2017-11-19 31 views
1

당분간은 매분 2 분마다 Printing...을 인쇄하는 프로그램을 만들고 있습니다. 나의 이해에서스윙 타이머가 인터발에서 이벤트를 실행하지 않음

package mainPackage; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.Timer; 

public class Ticker { 

    public static void tick() { 
     System.out.println("Printing..."); 
    } 

    public static void main(String args[]) { 

     ActionListener timerListener = new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       tick(); 
      } 
     }; 

     Timer mainTimer = new Timer(500,timerListener); 
     mainTimer.start(); 
    } 
} 

mainTimer 객체가 모든 500ms로 timerListener 처리 이벤트를 발사한다 : 여기 내 코드입니다. 이 코드를 실행하면 아무 일도 일어나지 않습니다. 스윙 event dispatch thread에서

+0

내가 내 대답을 삭제 한 사용을 고려 나는 당신이 따르지 않는 것을 본다 : https://stackoverflow.com/help/someone-answers – c0der

+0

이 점을 지적 해 주셔서 감사합니다. 이제이 오류를 바로 잡았으니 대답이 무엇인지 말해 줄 수 있습니까? – Psear

+1

'SwingTimer'는 EDT에서 작동합니다. EDT가 이벤트 핸들러에 들어가기 전에 응용 프로그램 스레드가 종료되기 때문에 이벤트를 가져 오지 못합니다. 작동하려면 최소한 첫 번째 이벤트 (예 : 600ms)가 될 때까지 주 스레드를 잠자 게해야합니다. –

답변

1

사용 스윙 타이머 : 당신은 타이머에서 GUI 변경에 대한 계획이없는 경우 과거의 질문을보고 있기 때문에

public static void main(String args[]) { 

    ActionListener timerListener = new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      tick(); 
     } 
    }; 

    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      Timer mainTimer = new Timer(500,timerListener); 
      mainTimer.start(); 
     } 
    }); 
} 

, java.util.Timer

+0

설명 확장이 필요합니다 - 왜 사용자가이 작업을이 방식으로 수행해야합니까? 왜 코드가 실패 했나요? – MadProgrammer