0

ボタンが押されるとカウントを開始する00:00:00のように見えるJavaでストップウォッチを作成しようとしています。何らかの理由で機能しませんが、欠けているものがあると確信しています。

for (;;)
    {
    if (pause == false)
            {
               sec++; 

               if (sec == 60)
               {
                   sec = 0;
                   mins++;
               }
                   if (mins == 60)
                   {
                       mins = 0;
                       hrs++;
                   }

               String seconds = Integer.toString(sec);
               String minutes = Integer.toString(mins);
               String hours = Integer.toString(hrs);

               if (sec <= 9)
               {
                   seconds = "0" + Integer.toString(sec);
               }
               if (mins <= 9)
               {
                   minutes = "0" + Integer.toString(mins);
               }
               if (hrs <= 9)
               {
                   hours = "0" + Integer.toString(hrs);
               }

               jLabel3.setText(hours + ":" + minutes + ":" + seconds);
            }
4

3 に答える 3

3

何が問題なのかはわかりませんが、このブロックをfor(;;)ループに入れることは間違いなく致命的です。

forループの代わりに次のようなものを試してください。

// "1000" here means 1000 milliseconds (1sec). 
new Timer( 1000, new ActionListener(){
  public void actionPerformed( ActionEvent e ){
    if( pause == false ){ 
      // ... code from above with the for(;;)
    }
  }
}.start(); 

詳細については、タイマー クラスのドキュメントを参照してください。

于 2012-07-19T19:11:26.387 に答える
0

まず、反復は 1 秒未満で実行されるため、「時間がかかる」ことになります。

おそらく、プログラムを正確にするためにメソッドのようなものを使用する必要があり、時間System.currentTimeMillis()の処理方法をよりよく知っているライブラリ、またはプログラムで1秒の単純なスリープを使用する必要があります(ただし、実際には正確ではありません)。

于 2012-07-19T19:10:01.420 に答える
0

私は、これがメインクラスから「そのまま」実行されているだけであると仮定します(別の方法で提案する証拠を提供していないため)。数値が非常に速く増加し、ストップウォッチとはまったく似ていないことに気付くでしょう。Thread.sleep(1000)各反復の間に 2 番目のパスを使用します。

編集: 一時停止ボタンが機能しない場合は、Swing を使用していて、ボタンがイベント スレッドでハングアップしていて、何もしていないと仮定します。簡単な修正は、一時停止ボタンが開始しようとしているメソッドを作成して実行することですpause -> staticswing-worker

于 2012-07-19T19:11:12.343 に答える