2011-05-20 19 views
1

我在Java中創建了一個(2nd)定時器,但不是在創建Timer時添加了參數(int,action),而是試圖初始化一個actionlistener中的Timer。 原因是在actionlistener中創建了int [在timers arguement]中。在Java中使用ActionListener調用定時器

當我這樣做,但定時器無法找到。

import java.awt.*; 
import java.awt.event.*; 
import java.io.IOException; 
import java.sql.*; 
import java.util.ArrayList; 

import javax.swing.*; 
import javax.swing.border.Border; 

public class mainGui extends JFrame { 

    public mainGui() 
    { 

     final ActionListener timerActionEvent = new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       //Start a task here 
       Timer myTimer2 = (Timer)evt.getSource(); 
       //myTimer2.stop(); 
       BluetoothScan(myTimer2); 
      } 
     }; 
     final ActionListener timerDurationActionEvent = new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       //Create a method to stop both timers at the bottom of this class 
       Timer myTimer3 = (Timer)evt.getSource(); 
       StopTimers(myTimer3); 
      } 
     }; 
     final Timer timerDuration; 
     final Timer myTimer = new Timer(5000, timerActionEvent); 

     /* 
     * Start All ActionListeners // ItemListeners 
     */ 

     ActionListener btnScanAction = new ActionListener() { 
      //Action listener for reading data from db 
      public void actionPerformed(ActionEvent e) { 
       int roomID = 0; 
       int lecturer = 0; 
       int unit; 
       int roomIDIndex; 
       int lectIDIndex; 
       int yearIDIndex; 
       int unitIDIndex; 
       String[] roomArray; 
       String[] lecturerArray; 
       String[] unitArray = null; 
       int durationIndex; 
       String DURATION; 
       int durationInt; 
       //System.out.println(unitArray.length); 
       durationIndex = durCB.getSelectedIndex(); 
       DURATION = itemDuration[durationIndex]; 
       durationInt = Integer.parseInt(DURATION); 
       //User Selected Duration converted to Milliseconds 
       int durationMilliSec = (int)(durationInt * 60000); 
       ArrayList<String[]> unitYear = null; 
       //Store the index ID of the JComboBox Selections 
       roomIDIndex = roomCB.getSelectedIndex(); 
       lectIDIndex = lectCB.getSelectedIndex(); 
       unitIDIndex = unitCB.getSelectedIndex(); 
       yearIDIndex = yearCB.getSelectedIndex(); 
       switch(yearIDIndex) 
       { 
        case 1: 
         unitYear = Units1; 
         break; 
        case 2: 
         unitYear = Units2; 
         break; 
        case 3: 
         unitYear = Units3; 
         break; 
        case 4: 
         unitYear = UnitsMasters; 
         break; 
       } 
       //Get the Array contents at index location 
       roomArray = rooms.get(roomIDIndex); 
       lecturerArray = Lecturers.get(lectIDIndex); 
       unitArray = unitYear.get(unitIDIndex); 
       if(unitArray == null) { 
        System.out.println("Please select a unit"); 
        System.exit(0); 
       } 
       roomID = Integer.parseInt(roomArray[0]); 
       lecturer = Integer.parseInt(lecturerArray[0]); 
       unit = Integer.parseInt(unitArray[0]); 
       populateComboBoxes pcb = new populateComboBoxes(); 
       pcb.LabSessionInfo(roomID, lecturer, unit); 
       myTimer.start(); 

       //HERE IS MY PROBLEM 

       timerDuration(durationMilliSec, timerDurationActionEvent).start(); 
      } 
     }; 

    } 
    public void BluetoothScan(Timer myTimer) { 
     BluetoothDeviceDiscovery scan = new BluetoothDeviceDiscovery(); 
     try { 
      myTimer.stop(); 
      scan.main(); 
     } catch(IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch(InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     myTimer.start(); 
    }; 
    public void StopTimers(Timer timerDuration) { 
     timerDuration.stop(); 
     //myTimer.stop(); 
    } 
} 

問題在於在btnScanAction ActionListener的底部創建定時器timerDuration(durationMilliSec,timerDurationActionEvent)。開始()時;

其無法在ActionListener中看到創建的Timer的問題。有誰知道一個可能的方法,仍然保持timerDuration(durationMilliSec,timerDurationActionEvent).start();在ActionListener中?

非常感謝球員

+2

你不需要'stmt.close(); conn.close();''中try'。 finally塊總是執行。 – oliholz 2011-05-20 14:05:46

+1

您是否必須向我們展示無數代碼行,而不是試圖開發顯示問題的短片段? – jfpoilpret 2011-05-20 14:33:42

回答

1
timerDuration(durationMilliSec, timerDurationActionEvent).start(); 

不作任何SENCE這裏。 Java期望在這裏調用方法。 如果你想開始新的定時器()在這裏,然後寫

Timer timer = new TimerTask() { 
// code here 
}.start(); 
+0

我似乎無法從我的ActionListener中做到這一點,因爲ActionListener需要是公共無效的,即沒有返回值。但據我所知,一個Timer需要有一個返回值。 – 2011-05-20 21:02:45