2012-10-15 2 views
4

현재 프로젝트의 경우 사용자가 5 초마다 한 번만 버튼을 누를 수 있도록 허용해야합니다. 우리는 인쇄 작업을 시작하기 위해 버튼을 사용하지만 사용자가 버튼을 스팸하거나 12 가지 인쇄 작업을 시작하지 못하도록해야합니다.자바에서 버튼을 5 초마다 최대 1 회 누름

우리는 현재 다음 코드로 시도하고 있지만 버튼이 비활성화되어 있어도 클릭 수를 줄인 것처럼 보입니다. 따라서 5 초가 지나면 버튼이 비활성화 된 시점에 클릭 수가 너무 많이 등록됩니다.

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

     Button1.setEnabled(false); 
     pressCount++; 
     System.out.println("Press count: " + pressCount); 
    PrintJob print = new PrintJob(); 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(GUIFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    try { 
     print.PrintJob(); 
    } catch (IOException ex) { 
     Logger.getLogger(GUIFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
+1

GUI 스레드 (EDT)에서 'Button1.setEnabled (false)'를 호출하면 안됩니까? – assylias

+0

나는 setEnabled가 EDT라고 부를 수있는 몇 가지 스윙 관련 방법 중 하나입니다. – RNJ

+0

어떤 문제를 해결하려고합니까? –

답변

3

프로그램 버튼이

+0

고마워요! 나는 내 문제를 해결하기 위해 다음 코드를 사용했다 : Button1.setMultiClickThreshhold (5000); – Alfuananzo

+0

당신을 도울 수있어서 기쁘다. 그리고 차단 될 때까지 JButton 아이콘을 바꾼다. – mKorbel

3

EDT를 5 초 동안 대기시키지 마십시오. 다른 스레드를 사용하여 5 초 동안 절전 모드를 설정해야합니다. 이런 식으로 뭔가 :

new Thread(new Runnable() { 
    public void run() { 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     // handle it 
    } 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     Button1.setEnabled(true); 
     } 
    }); 
    } 
}).start();