gpt4 book ai didi

swing - 从 Java 中的 ActionListener 内部调用计时器

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:19 25 4
gpt4 key购买 nike

我在 Java 中创建了一个(第二个)计时器,但我没有在创建计时器时添加参数(int,action),而是尝试在 Action 监听器中初始化计时器。原因是 int [在计时器争论中] 是在 Action 监听器中创建的。

当我这样做时,找不到计时器。

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 中??

非常感谢大家

最佳答案

timerDuration(durationMilliSec, timerDurationActionEvent).start();

这里没有任何意义。 Java 期望在这里调用方法。如果你想在这里启动新的Timer(),那么写

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

关于swing - 从 Java 中的 ActionListener 内部调用计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com