2016-11-05 12 views
0

私はタイマーを停止し、残念なことに、誰かが助けることができるように願って、これを日中これを解決しようとしてきました。スイングタイマーの問題 - タイマーを停止

タイマーを使用してテキストフィールドの値を増加させるボタンをクリックすると、開始ボタンにタイマーが表示され、停止ボタンでタイマーを停止したいと考えています。あなたの投稿をコードでスコープの問題を持っている

private void btStartTimerActionPerformed(java.awt.event.ActionEvent evt) { 

     javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener(){ 
      public void actionPerformed(ActionEvent evt) { 

       btAddOneActionPerformed(evt); 
       } 
     }); 
tm.start(); 

}

private void btStopTimerActionPerformed(java.awt.event.ActionEvent evt) { 

} 
+1

よりよいヘルプについては、[、最小完全、かつ検証プログラム例](http://stackoverflow.com/help/mcve)を作成し、掲載を検討してください。私たちはあなたのプログラム全体を見たいとは思っていませんが、あなたのコードをコンパイルしてコンパイルし、あなたの問題とは関係ない余分なコードがなくてもあなたの問題を実証しています。バグを分離して公開しようとするだけで、問題を非常にうまく解決できます。 –

答えて

1

::私は私のスタートボタンの後ろに持っているコードです

あなたのタイマ変数、TMは、宣言されていますあなたの開始ボタンのactionPerformedメソッド内ではそのメソッド内でのみ表示されます。したがって、そのメソッドの外にあるときは、実行可能な参照を取得することはできません。解決策は、プライベートインスタンス(非静的)変数としてクラスレベルで変数を宣言し、開始ボタンのアクションリスナー内でstart()を呼び出します。これにより、クラス全体で変数が表示され、停止ボタンのリスナーはそのメソッドを呼び出すことができます。

例えば、

package pkg3; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.Timer; 

public class TimerDeclaration { 
    private static final int DELAY = 1000; 

    // the tm2 variable is visible throughout the class 
    private Timer tm2 = new Timer(DELAY, new TimerListener()); 

    private JButton btStartTimer1 = new JButton("Start Timer 1"); 
    private JButton btStartTimer2 = new JButton("Start Timer 2"); 

    public TimerDeclaration() { 
     btStartTimer1.addActionListener(e -> btStartTimer1ActionPerformed(e)); 
     btStartTimer2.addActionListener(e -> btStartTimer2ActionPerformed(e)); 
    } 

    private void btStartTimer2ActionPerformed(ActionEvent e) { 
     tm2.start(); // tm2 is visible throughout your program 
    } 

    private void btStartTimer1ActionPerformed(ActionEvent e) { 
     javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 

       // btAddOneActionPerformed(evt); 
      } 
     }); 
     tm.start(); // this is only visible inside here!!! 
    } 

    private class TimerListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 
} 
+0

例がありますか? –

+0

@Jamesanderson:確かに。 [これらのリンク](http://stackoverflow.com/search?q=user%3A522444+swing+timer)と[Swing Timer tutorial](http://docs.oracle.com)をご覧ください/javase/tutorial/uiswing/misc/timer.html) –

+0

私のコード内でどのように見えるか教えていただけますか? 、私は問題がある場合は申し訳ありません。 –

関連する問題