Я создал (2-й) таймер в Java, но вместо того, чтобы добавлять аргументы (int, action) при создании таймера, я пытаюсь инициализировать таймер внутри actionlistener.
Причина в том, что int [в аргументе таймеров] создается в списке действий.
Когда я делаю это, таймер не может быть найден.
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) .start ();
проблема в том, что невозможно увидеть созданный таймер из ActionListener. Кто-нибудь знает возможный способ обойти это, все еще сохраняя timerDuration (durationMilliSec, timerDurationActionEvent) .start (); В ActionListener ??
Большое спасибо, ребята