calling a Timer from inside an ActionListener in Java
I have created a (2nd) Timer in Java but rather than adding the arguements (int, action) when creating the Timer, I am trying to initialize the Timer inside an actionlistener. The reason is that the int [in the timers arguement] is created within the actionlistener.
When i do this though, the Timer cant be found.
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:
开发者_Go百科 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();
}
}
The problem lies at the bottom of the btnScanAction ActionListener when creating the Timer timerDuration(durationMilliSec, timerDurationActionEvent).start();
its a problem with not being able to see the created Timer from within the ActionListener. Does anyone know of a possible way round this, still keeping the timerDuration(durationMilliSec, timerDurationActionEvent).start(); In the ActionListener??
Thanks a lot guys
timerDuration(durationMilliSec, timerDurationActionEvent).start();
Doesn't make any sence here. Java expects method call here. If you want to start new Timer() here, then write
Timer timer = new TimerTask() {
// code here
}.start();
精彩评论