1

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:
                        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

2
  • 2
    you dont need stmt.close();conn.close(); in try. The finally block always executes. Commented May 20, 2011 at 14:05
  • 1
    Did you have to show us zillions of lines of code, instead of trying to develop a short snippet showing the problem? Commented May 20, 2011 at 14:33

1 Answer 1

1
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();
Sign up to request clarification or add additional context in comments.

1 Comment

I cannot seem to do that from within my ActionListener, as the ActionListener needs to be public void i.e. no return value. But as far as i know, a Timer needs to have a return value.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.