2

alert()メソッドを呼び出すためのタイマーを実装しました。タイマーの期間はデータベースから取得されます。期間を1分に設定すると、タイマーは1分ごとにalert()を呼び出します。もう一度5分間設定しても、1分タイマーが止まりません。これで、2つの実行中のタイマーができました。以前のタイマーを削除するにはどうすればよいですか?ありがとう。

private void getDuration() 
{       
    durationTimer = new javax.swing.Timer(durationDB, new ActionListener() 
    {               
        public void actionPerformed(ActionEvent e) 
        {       
            alert();      
        }     
    });                 
    durationTimer.stop();

    try
    {   
        // Connection to the database
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/smas","root","root");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM alertduration");    

        while (rs.next()) 
        {
            durationDB = rs.getInt("duration");     
        }   

        con.close();            
    }

    catch(Exception ea)
    {
        JOptionPane.showMessageDialog(watchlist, "Please ensure Internet Connectivity ", "Error!", JOptionPane.ERROR_MESSAGE);
    }           


    durationTimer = new javax.swing.Timer(durationDB, new ActionListener() 
    {               
        public void actionPerformed(ActionEvent e) 
        {       
            alert();      
        }     
    });         

    durationTimer.start();
4

1 に答える 1

3

最初のタイマーが終了したら、stop() メソッドを呼び出します。継続時間が変わるたびに新しいタイマーを作成するのではなく、タイマーをグローバルにして再利用することも価値があるかもしれません。参照: http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html

例:

durationTimer = new javax.swing.Timer(duration, new ActionListener() {               
    @Override
    public void actionPerformed(ActionEvent e) {       
        alert();
    }     
});                 

durationTimer.start();

//wait for duration to change
durationTimer.stop();
durationTimer.setDelay(duration);
durationTimer.start();
于 2012-05-21T16:06:29.237 に答える