2013-07-19 3 views
0

시스템을 5 초마다 자동으로 실행하는 방법. 이 프레임은 포커스가 아니므로 포커스가있는 JDialog가 될 수 있으므로 프로세스가 실행될 수 있습니까? 감사합니다.스레드에 관한 논리에 관한 질문

+1

무엇을 시도 했습니까? 왜 작동하지 않았습니까? Stackoverflow는 당신이 튜토리얼과 같은 지침을 원할 때가 아니라, 좀 더 구체적인 질문이있을 때 가장 잘 작동합니다. –

+0

무엇이 문제가 있습니까? –

+0

시스템이 프레임의 프레임과 함께이 프로세스를 실행할 지 모르겠습니까? 왜냐하면 사용자가 시스템의 다른 프레임을 사용할 때 프로세스를 계속 진행해야하기 때문입니다. – Rafael

답변

1

스윙 Timer을 사용하십시오. 액션 리스너를 만들고 액션 리스너를 추가 한 다음 시작하면 액션 리스너가 주기적으로 호출됩니다. 예를 들면 다음과 같습니다.

Timer timer = new Timer(500); 
timer.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     // this runs every 500 milliseconds 
    } 
} 
timer.start() 
+0

해당 타이머 개체가 UI 업데이트를 EVT로 보내고 있습니까? –

+0

아니요. SwingUtilities.invokeLater'를 사용해야합니다. – tbodt

+3

@tbodt "모든 Timer는 실행되는 첫 번째 Timer 객체에 의해 생성 된 단일 공유 스레드를 사용하여 대기를 수행하지만 타이머에 대한 액션 이벤트 핸들러는 다른 스레드, 즉 이벤트 전달 스레드에서 실행됩니다. 타이머 용 핸들러는 Swing 구성 요소에 대한 작업을 안전하게 수행 할 수 있지만 GUI가 응답을 유지하려면 핸들러가 신속하게 실행되어야 함을 의미합니다. " (http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html) –

0

새 스레드를 생성하고 5 초 동안 루프를 만들 수 있습니다.

그러나 복잡한 요구 사항이있는 경우 Quartz (Spring은 하나도 포함)와 같은 스케줄링 라이브러리를 사용해야 할 것입니다. 100 개의 스레드를 생성하고 싶지 않으므로 모두 5 초가 지나야하지만 1 개의 스케줄러 스레드가 여러 개의 작업자 스레드를 트리거하도록하고 싶습니다.

+0

아니요. 작고 집중된 작업에서는 석영을 추가하는 것이 의미가 없습니다. 타이머가 여기에 더 적합합니다 –

+0

@DavidHofmann 그래서 내가 "당신이 더 복잡한 필요가 있다면"이라고 말한 것입니다 :) –