呼び出されると、ネットワークを介して送信されるトラフィックをリッスンし、そのトラフィックに関する情報をコンソールに出力するJavaメソッドがあります。私のプログラムは現在コンソールで実行されていますが、ユーザーがプログラムを操作できるようにするためのグラフィカルユーザーインターフェイスの作成を検討しています。
現在、プログラムを実行すると、実行中の間、コンソールへのネットワークトラフィックに関するステートメントが継続的に出力されます。実行を停止する唯一の方法は、Eclipseコンソールウィンドウの[終了]ボタンをクリックすることです。 。
しかし、私が作成しているグラフィカルユーザーインターフェイスには、ユーザーがクリックしてネットワーク上のトラフィックのリッスンを開始できる「開始」ボタンがありますが、リッスンを開始すると、ユーザーに許可する方法がありません。 GUIを介して停止します。
ネットワークを介して送信される情報は常に存在するため、情報が受信されなくなるまで呼び出しを停止することはできません。メソッドへの呼び出しを停止する「停止」ボタンを追加します(つまり、停止します)。私のプログラムはネットワークトラフィックをリッスンしません)が、最初のメソッドがリッスンするのを停止するためにどのメソッドを作成/呼び出す必要があるのかわかりません。
「スタート」ボタンにはActionListener
、ボタンのクリックをリッスンし、別のクラスのメソッドを聞いたときにそれを呼び出すものがあります。「停止」ボタンを作成することはできますがActionListener
、クリックを聞いたときに最初のメソッドが呼び出されないようにするために、どのメソッドを呼び出すかがわかりません。
誰か提案がありますか?
2014年4月28日14時15分編集
これは、「停止」ボタンを作成するために使用しているコードです。
JButton stopCaptureButton = new JButton("Stop");
panel.add(stopCaptureButton);
stopCaptureButton.setBounds(875, 350, 80, 30);
stopCaptureButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
EspduReceiver.stopCapture = true;
pool.shutdown();
}
});
しかし、どういうわけか、クリックしてもまったく何も起こりません...
ネットワーク情報をキャプチャするために使用しているメソッドは呼び出されます。receivePdu()
このメソッドの開始時に、条件がありwhile(true){...
、ネットワークを介して送信されている情報をキャプチャするためのすべてのコードがあります。
receivePdu()
メソッドの最後に、次のコードがあります。
Boolean queryStopCapture = stopCapture;
if(queryStopCapture == true){
break;
}
変数stopCapture
はグローバル変数であり、次receivePdu()
の行を持つメソッドと同じクラスで定義されますpublic static Boolean stopCapture = false;'
あなたが見ることができるように、私はの値に設定していますstopCapture
へのtrue
クリックが私の上で検出されたときにstopCaptureButton
トリガする必要のある、break;
私の終わりにreceivePdu()
方法が、それはそれをやっているようには見えません。
なぜ何かアイデアはありますか?または私が間違っていることは何ですか?
問題は、break;
ステートメントが呼び出されなかったことを意味する無限ループがあったことだったようです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加