簡體   English   中英

使用Java與計時器交替顯示圖像

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

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