1

ログファイルからデータベースにデータを送信するプログラムを作成しています。実行ボタンを押すとプログラムが開始し、停止ボタンを押すと停止します。今まで、実行ボタンを押すと実行できましたが、停止できませんでした。誰かが私を助けることができますか?

私が停止したいプログラムはこれです(停止を行うためにすべてが重要だとは思いませんが、プログラム全体を入れます):

private void RunActionPerformed(java.awt.event.ActionEvent evt){
    // Creating a Timer object and scheduling the program to run every ten minutes
    if(evt.getSource() == Run) {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask(){
            public void run() {
                try {
                    // THE CODE, WITH WHAT HAS TO BE DONE
                } catch (SQLException ex) {
                    JOptionPane.showMessageDialog(null,ex);;
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(null,ex);;
                } catch (InstantiationException ex) {
                    JOptionPane.showMessageDialog(null,ex);;
                } catch (IllegalAccessException ex) {
                    JOptionPane.showMessageDialog(null,ex);;
                } catch (ClassNotFoundException ex) {
                    JOptionPane.showMessageDialog(null,ex);;
                }
            }
        }, 0, 60 * 1000 * 10); //Number of minutes, until the program starts to run again
    }
}                                   

private void StopActionPerformed(java.awt.event.ActionEvent evt){
    // TODO add your handling code here:
}                            

では、それを止めるにはどうすればよいでしょうか。前もって感謝します

4

3 に答える 3

0

プログラムが DB 操作のようなブロッキング呼び出しに遭遇した場合、db 接続を強制終了してプログラムから抜け出す以外に選択肢はありません。そのため、Db 操作がオンの場合、停止ボタンは機能しません。

それ以外の場合、最も簡単な方法は、停止メソッドで Thread クラスの「割り込み」関数を使用してスレッドを中断し、実行メソッドで割り込み例外をチェックして正常に終了することです。

于 2013-04-28T12:44:29.950 に答える
0

あまり優雅ではありませんが、単純です:ブール値を使用します:

 public void run() {
   if (go) {
     //...
   }
 }
}                                   

private void StopActionPerformed(java.awt.event.ActionEvent evt) {                                     
 go = false
}           

そして、スタートボタンのactionPerformedに「go = true」を追加

于 2013-04-28T12:36:57.090 に答える