2013-10-07 8 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); 
} 

Это создает кучу 100х30 изображения из 1.png в 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.

Что я делаю неправильно ...?

+2

В каком контексте используется код, управляющий значком в трее? Возможно ли, что он блокирует поток пользовательского интерфейса от рисования значка? Я не уверен, но, может быть, вам нужно сделать это в отдельном потоке? –

+1

Не тот ответ, который вы ищете, но в качестве побочного примечания вы можете заменить циклы for в makeImage на g.fillRect (0, 0, percent, img.getWidth()) –

+1

@DavidConrad, что и было .. спасибо. Не стесняйтесь публиковать как ответ, и я соглашусь –

ответ

2

В каком контексте используется код, управляющий значком в трее? Возможно ли, что он блокирует поток пользовательского интерфейса от рисования значка? Я не уверен, но вам может понадобиться сделать это в отдельном потоке.