[英]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.