簡體   English   中英

在Java中使用Timer和TimerTask打印不同的變量

[英]Printing different variables using Timer and TimerTask in java

我有一個關於使用計時器打印句子的小問題。 我知道擴展TimerTask和覆蓋run方法的過程,但是在這里我可以打印一個靜態語句。 但就我而言,我必須在不同的時間段打印歌曲列表(來自數組)和藝術家列表(來自數組)。

例如,我有3首歌:第一首有3分鍾,第二首有2.5分鍾,第三首有5分鍾。 輸出應為以下內容:

藝術家1的歌曲一首正在播放...(3分鍾后)藝術家2的歌曲一首正在播放...(2.5分鍾之后)藝術家3的歌曲三正在播放...(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();
}

}

當我運行程序時,我會同時打印所有三個句子,它們之間沒有時間差

您要調度同一線程多次。 因此,一旦已對其進行調度,則在循環的第二次迭代中,當代碼嘗試再次對其進行調度時,您將收到IllegalStateException

您需要在循環中創建單獨的Thread對象

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]);
    }    
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM