final Timer timer = new Timer(10, new ActionListener() {
long startTime = -1;
@Override
public void actionPerformed(ActionEvent event) {
..................
..................
}
});
:これを解決するには、このようなローカルTimerクラス自体の中のstartTime変数を宣言して初期化することです。タイマーののactionPerformedイベント内のTimer.stop()メソッド(つまり、timer.stop();)を使用して、Timer.stop()メソッドを使用してTimerを起動して停止することはできません簡単な理由から、変数タイマーには適切なスコープがなく、初期化されていることがわかりません。はい、おそらくコンパイルされ、timer.stop()メソッドが呼び出されてランタイム例外が返されるまで実行されます("可変タイマーが初期化されていない可能性があります")。いいえ、あなたが最終的にタイマー(泥酔した練習)を止めないので、例外をキャッチし、過ぎ去ったことを過ぎ去らせることについて考えないでください。あなたは自分のストップで少し手の込んだを取得する必要があり、これはトリックを行います:あなたも1のために長い数の値を指定したい場合は、あなたの期間、今変数を
((Timer)event.getSource()).stop();
//event is the ActionEvent variable (usually evt in some IDE's).
を、これでは何の問題もありませんタイミングの分。それがあなたのものなら素晴らしいですが、個人的に私は60000の代わりに60に入るのが好きです。値がハードコードされているかどうかは問題ではありませんが、実際に供給される値(どこからでも)であれば、追加変数を使用する秒数(IMHO)を指定する方が良いでしょうたとえば、
int seconds = 10;
final long duration = seconds * 1000;
ここで、カウントダウンタイマーを設定する秒数を指定するだけで済みます。
もう1つの問題は、というラベルがというJLabelを表すと宣言したことですが、その変数を実際のJLabelのどこかで参照することも、フレームまたはパネルコンポーネントに追加することもありません。私はすでにあなたのGUI内のJLabelをインストールしていることを考え、あなたはこのように、ラベル変数を宣言するときに、そのJLabelの変数名を指定する必要があります。その場合には(あなたはGUIを持っている場合):
JLabel label = (JLabel)jLabel1;
このようにして、ラベル変数はGUI内にjLabel1という名前のJLabelを表します。
そして最後に(そしてこれは大変です)、あなたがそうするよう指示しなければ、あなたのタイマーは動かないでしょう。あなたがこれを行うのですかどこで、あなたのローカルタイマークラス、このような:)もちろん良く、右下:
final Timer timer = new Timer(10, new ActionListener() {
long startTime = -1;
@Override
public void actionPerformed(ActionEvent event) {
..................
..................
}
});
timer.start();
とにかく、ここにある約束どおり完全なコードです:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int seconds = 10; // supply timer duration in seconds
final long duration = seconds * 1000; // calculate to milliseconds
JLabel label = (JLabel)jLabel1; //whichever JLabel is in GUI
final Timer timer = new Timer(10, new ActionListener() {
long startTime = -1;
@Override
public void actionPerformed(ActionEvent event) {
if (startTime < 0) {
startTime = System.currentTimeMillis();
}
long now = System.currentTimeMillis();
long clockTime = now - startTime;
if (clockTime >= duration) {
clockTime = duration;
((Timer)event.getSource()).stop(); // stop the Timer
label.setText("Time Is UP"); // remove if you want or maybe just ""
return;
}
SimpleDateFormat df = new SimpleDateFormat("mm:ss:SSS");
label.setText(df.format(duration - clockTime));
}
});
timer.start();
}
'新しいJLabelのは、 '...? – Tunaki
このコードでは何を達成したいですか?ボタンが必要な場合は、一度ロックすることができます。このクラスを作成します。 –
このコードをJpanelの中に追加したいのですが、どうやって行うのか分かりません。たとえ私がそれを追加してクラスを作成したとしても、JPanelはタイマーを表示しませんでした@JarlikStepsto –