2013-03-27 4 views
0

Raspberry PI에서 실행되는 Swing GUI 테스트를 시도합니다. 내 목표는 1 초마다 시스템 시간을 표시하는 것입니다. 모든 "cycleTime"초마다 "planValue"가 업데이트됩니다. 데스크톱에서 테스트하면 정상입니다. RaspPI를 실행할 때 "planValue"를 업데이트하거나 새로운 Dialog를 팝업 할 때 매우 느리고 시간이 지연됩니다. 나는 새로운 타이머 planTimer타이머와 성능 사이에 성능 차이가 있습니까?

Timer planTimer = new Timer(cycleTime * 1000, new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     planValue += 1; 
    } 
}); 
planTimer.start(); //Timer updPlan start 

만들거나 actionPerformed(ActionEvent e)

@Override 
public void actionPerformed(ActionEvent e) { 
    showDisplay(); 
     if(counter == cycleTime) { 
      planValue += 1; 
      counter = 1; 
     } else { 
      counter++; 
     } 
    } 
} 

어떤 제안에 루프를 사용하는 경우

이 MainScreen 클래스

public class MainScreen extends javax.swing.JFrame implements ActionListener { 

    private javax.swing.JLabel jLabelPlan; 
    private javax.swing.JLabel jLabelSysTime; 
    int planValue; 
    int cycleTime = 5; //5 seconds 
    int counter = 1; 

    public MainScreen() { 
     initComponents(); 
     //start timer. 
     javax.swing.Timer timer = new javax.swing.Timer(1000,this); 
     timer.start(); 
    } 

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

    public void showDisplay() { 
     DateFormat formatTime = new SimpleDateFormat("HH:mm:ss"); 
     jLabelSysTime.setText(formatTime.format(Calendar.getInstance().getTime())); 
     jLabelPlan.setText(String.valueOf(planValue)); 
    } 
} 

은? 또는 Raspberri PI에서 내 GUI를 실행하기위한 최상의 솔루션입니다. 감사.

+0

는'javax.swing.Timer' 당신이 찾고 무엇에 충분하다. 'javax.swing.SwingWorker'도 참조하십시오. 루프를 사용하지 마십시오. 그 대신 매 타이머를'1' 초마다 발사하도록하십시오. –

+0

'showDisplay'는'repaint (10L);'에서 끝나야 할 수도 있습니다. –

답변

4

Timer.setRepeats(true)을 사용하여 반복적으로 이벤트를 발생시키는 타이머를 만들어야합니다.

Timer planTimer = new Timer(cycleTime * 1000, new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     planValue += 1; 
    } 
}); 
plainTimer.setRepeats(true);//Set repeatable. 
planTimer.start(); 

그리고 당신의 timer 변수는 다음과 같이해야합니다 :

javax.swing.Timer timer = new javax.swing.Timer(1000, new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent evt) 
    { 
     showDisplay(); 
    } 
}); 
timer.setRepeats(true); 
timer.start(); 
+0

1 Timer에서 sysTime 및 planValue를 업데이트 할 수 있습니까? – Phonbopit

+0

예. 확실히 할 수 있습니다 .. –

+0

1 Timer (planTimer)를 사용할 때마다 sys.lash를 5 초마다 새로 고침 할 때 javax.swing.Timer 타이머가 무슨 소리로 들립니다. – Phonbopit

관련 문제