【问题标题】:Printing different variables using Timer and TimerTask in java在 java 中使用 Timer 和 TimerTask 打印不同的变量
【发布时间】:2015-07-07 23:00:52
【问题描述】:

我遇到了一个关于使用计时器打印句子的小问题。我知道扩展 TimerTask 和覆盖 run 方法的过程,但在这里我可以打印一个静态语句。 但就我而言,我必须打印不同时间段的歌曲列表(来自数组)和艺术家列表(来自数组)。

例如我有 3 首歌曲:第一首 3 分钟,第二首 2.5 分钟,第三首 5 分钟。输出应该如下:

艺术家一号的歌曲一正在播放... (3分钟后) 艺术家二的歌曲二正在播放... (2.5 分钟后) 艺术家三的歌曲三正在播放... (5分钟后) 程序停止。

我目前的代码是这样的:

主类:

package test;

import java.util.Timer;

public class Test {

public static void main(String[] args) {

    Timer timer = new Timer("Printer");



    for(int i = 0 ; i < 3 ; i++) {
        Thread t = new Thread();
        int dur = t.getDurations()[i];
        timer.schedule(t, 0, dur);
    }


}
}

类扩展 TimerTask:

package test;

import java.util.TimerTask;

/**
*
* @author GraphPixel
*/
public class Thread extends TimerTask {
String[] song_list = { "Song One", "Song Two", "Song Three" };
String[] artist_list = { "Artist One", "Artist Two", "Artist Three" };
int[] durations = { 2000, 1500, 2500 };

public int[] getDurations() {
    return durations;
}

public String[] getSong_list() {
    return song_list;
}

public String[] getArtist_list() {
    return artist_list;
}

@Override
public void run() {
    int i = 0;
        System.out.println(song_list[i] + " played by " + artist_list[i]);
        i++;
    cancel();
}

}

当我运行程序时,我同时打印了所有三个句子,它们之间没有时间差

【问题讨论】:

    标签: java timer timertask


    【解决方案1】:

    您正在多次调度同一个线程。所以一旦它已经被调度,在循环的第二次迭代中,当代码尝试再次调度它时,你会得到IllegalStateException

    你需要在循环中创建单独的线程对象

    import java.util.Timer;
    
    public class Test {
    
     public static void main(String[] args) {
    
        Timer timer = new Timer("Printer");        
    
        for(int i = 0 ; i < 3 ; i++) {
            Thread t = new Thread();
            timer.schedule(t, 0, t.getDurations()[i]);
        }    
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2013-10-08
      • 2015-07-29
      相关资源
      最近更新 更多