[英]Alternating images with a timer using java
由於我不是CS專業的學生,因此在將編程願望轉換為實際程序時遇到了一些困難。 基本上可以歸結為以下幾點:如何在標簽上交替顯示圖像,以針對每個圖像的特定時間顯示每個圖像。
所以:說我有圖像A和B; 我希望用戶看到A持續1000ms,B持續200ms。 這一直循環播放,直到用戶按下某個鍵為止。
現在,我什至可以很容易地將圖像加載到面板上,並且我設法使用KeyListener和東西來捕獲用戶輸入,所有這些都很好地工作,並且比我預期的要容易得多。 我也知道如何使用while,for和do..while之類的循環結構,但是此計時器業務很差勁。
我看到各種使用線程的東西,什么也不用,我真的不需要。 這不是關於有效的編程或好的代碼,而是關於演示的東西。 任何幫助將不勝感激!
這可能是一個很好的例子: http : //www.java2s.com/Code/Java/Development-Class/UsejavautilTimertoscheduleatasktoexecuteonce5secondshavepassed.htm
如果看起來令人困惑,我可以嘗試解釋代碼
當線程是完成任務的正確工具時,使用線程並不一定會效率低下。
在這種情況下,創建實現Runnable
的新類並不是沒有道理的,該類包含對要更改圖像的標簽的引用。
這意味着可以更改映像,而不會導致等待主應用程序的等待,直到掛起它為止。
您可能想避免“忙循環”(基本上是一個while循環,其中沒有Thread.sleep()),並查看是否有任何所需的線程退出條件
使用SwingWorker<Void, Void>
。 SwingWorker的doInBackground方法應如下所示:
@Override
protected Void doInBackground() {
try {
while (true) {
displayImage(imageA);
Thread.sleep(1000L);
if (isCancelled()) {
return null;
}
displayImage(imageB);
Thread.sleep(200L);
if (isCancelled()) {
return null;
}
}
}
catch (InterruptedException e) {
// ignore
}
return null;
}
private void displayImage(final Icon image) {
SwingUtilituies.invokeLater(new Runnable() {
@Override
public void run() {
// display the image in the panel
}
});
}
關鍵偵聽器應僅取消SwingWorker。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.