вызов таймера из ActionListener в Java - PullRequest
1 голос
/ 20 мая 2011

Я создал (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 ??

Большое спасибо, ребята

1 Ответ

1 голос
/ 20 мая 2011
timerDuration(durationMilliSec, timerDurationActionEvent).start();

Не имеет смысла здесь.Java ожидает вызова метода здесь.Если вы хотите запустить новый Timer () здесь, напишите

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