2013-10-07 23 views
1

我已經嘗試使用下面的代碼來創建一些進度條圖片:試圖顯示進度條圖標與Java任務欄,但我得到的是一個單一的黑線

public static void makeImage(int percent) 
{ 
    BufferedImage img = new BufferedImage(100, 30, BufferedImage.TYPE_INT_ARGB); 
    Graphics g = img.getGraphics(); 

    g.setColor(Color.LIGHT_GRAY); 
    g.fillRect(0, 0, 100, 30); 

    for (int x = 0; x < percent; x++) 
    { 
     for (int y = 0; y < img.getHeight(); y++) 
     { 
      img.setRGB(x, y, Color.GREEN.darker().getRGB()); 
     } 
    } 

    ImgUtility.save("/home/xxx/java/myProj/src/myProj/resources/progressbars/" 
      + percent + ".png", img); 
} 

這就造成了一堆從1.png 100x30圖像100.png,它看起來像這樣:

1.png

50.png

100.png

然後,我試圖在托盤中顯示這些圖像,並逐個循環,以顯示動畫進度條的錯覺(在實際使用中,我想使用這些圖像來顯示正在執行的任務的進度):

Tray tray = Display.getDefault().getSystemTray(); 
    TrayItem trayItem = new TrayItem(tray, SWT.NONE); 

    for (int p = 1; p <= 100; p++) 
    { 
     Image icon = IconLoader.load("progressbars/" + p + ".png"); 
     System.out.println(icon.getBounds()); //always outputs 
     //Rectangle {0, 0, 100, 30}, showing that the 100x30 images were loaded 
     //correctly. 
     trayItem.setImage(icon); 
     try 
     { 
      Thread.sleep(1000); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      System.exit(0); 
     } 
    } 

然而,當我運行此代碼,而不是看到任務欄上的完整圖像,我只看到一個垂直的黑色/深綠色的線。

我在Linux Mint上。

我在做什麼錯誤..?

+2

在什麼情況下正在操作托盤圖標運行的代碼?是否有可能阻止UI線程繪製圖標?我不確定,但也許你需要在單獨的線程上執行此操作? –

+1

不是你正在尋找的答案,但作爲一個附註,你可以用g.fillRect(0,0,percent,img.getWidth())代替makeImage中的for循環。 –

+1

@DavidConrad就是這樣..謝謝。隨意發佈答案,我會接受 –

回答

2

在什麼情況下操作托盤圖標的代碼正在運行?是否有可能阻止UI線程繪製圖標?我不確定,但您可能需要在單獨的線程上執行此操作。

相關問題