2013-10-23 56 views
0

我還是新來java,並從多個網站在線教程,我想爲我的GUI程序做一個計時器,但我想先測試一個標準循環中的計時器。Java javax計時器問題?

import javax.swing.*; 
import java.awt.*; 

class main { 
    public static void main(String Args[]) { 
     ActionListener changelight = new ActionListener(); 
     int delay = 1000; 
     Timer timer = new Timer(delay, changelight); 
     timer.start(); 
    } 

    public void actionPerformed(ActionEvent e) { 
      for (int a=0; a<=1000; a++) { 
      System.out.printf("%d \n", a); 
      } 
     return; 
    } 
} 

我似乎無法讓它正常運行,並希望其中一個使用可以看到爲什麼?

由於

+0

@JasonBraucht你的觀點是什麼?我似乎並不認爲這與上述問題有任何關係。 – Vallentin

回答

2

ActionListener是一個接口,不是類,這意味着你必須實現的方法(或多個),如下所示:,

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

public class Main { 

    public static void main(String args[]){ 
     final ActionListener action = new ActionListener(){ 
      public void actionPerformed(final ActionEvent e){ 
       for(int i = 0; i <= 1000; i++) 
        System.out.printf("%d\n", i); 
      } 
     }; 
     final Timer timer = new Timer(1000, action); 
     timer.start(); 
    } 
} 

或者,如果在使用的是Java 8,或許你可以嘗試這樣的:

public static void main(String args[]){ 
     final ActionListener listener = e -> { 
      for(int i = 0; i <= 1000; i++) 
       System.out.printf("%d\n", i); 
     }; 
     final Timer timer = new Timer(1000, listener); 
     timer.start(); 
    } 
+0

由於OP只想測試計時器,所以你應該在'timer.start();'之後放置一個'Thread.sleep(5000)',這樣程序就不會退出,這會殺死定時器。 – Vallentin

+0

爲什麼在動作偵探之前使用「最終」。這意味着什麼好處? – lecardo

+0

@Bobski閱讀答案[這裏](http://programmers.stackexchange.com/questions/98691/excessive-use-final-keyword-in-java)。 –

1

您的示例不起作用,因爲ActionListener是一個接口,你不能實例化它。相反,你需要創建你的類來實現它(或者添加實現ActionListener到你的類主然後實現actionPerformed)

即使你有這個權利,你的程序將比第一個事件更早完成,所以actionPerformed會不叫。爲了觀察你需要的一段代碼,它會'阻止你的程序過早到達最後',並且你可以使用簡單的JFrame對象。

這裏是工作示例:

import javax.swing.*; 

import java.awt.*; 
import java.awt.event.*; 

class TimerAction implements ActionListener{ 

    boolean isItTimeForTic = true; 

    @Override public void actionPerformed(ActionEvent e) { 
     if(isItTimeForTic) { 
     isItTimeForTic = false; 
      System.out.println("tic "); 
     } 
     else { 
     isItTimeForTic = true; 
     System.out.println("tac "); 
     } 
    } 
} 

public class TimerTest { 

    public static void main(String Args[]) { 
     int delay = 1000; 
     Timer timer = new Timer(delay, new TimerAction()); 

     timer.start(); 
     JFrame frame = new JFrame(); 
     frame.setVisible(true); 
    } 
}