Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图用Java在任务栏中显示进度条图标,但我得到的只是一条黑线_Java_Icons_Swt_System Tray_Trayicon - Fatal编程技术网

试图用Java在任务栏中显示进度条图标,但我得到的只是一条黑线

试图用Java在任务栏中显示进度条图标,但我得到的只是一条黑线,java,icons,swt,system-tray,trayicon,Java,Icons,Swt,System Tray,Trayicon,我尝试使用以下代码创建一些进度条图像: 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);

我尝试使用以下代码创建一些进度条图像:

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);
}
publicstaticvoidmakeimage(整数百分比)
{
BuffereImage img=新的BuffereImage(100,30,BuffereImage.TYPE_INT_ARGB);
Graphics g=img.getGraphics();
g、 setColor(颜色:浅灰色);
g、 fillRect(0,0,100,30);
对于(int x=0;x
这将创建一组从1.png到100.png的100x30图像,如下所示:

然后,我尝试在托盘中显示这些图像,并逐一循环,以显示动画进度条的幻觉(在实际使用中,我想使用这些图像显示正在完成的任务的进度):

Tray-Tray=Display.getDefault().getSystemTray();
TrayItem TrayItem=新的TrayItem(托盘,SWT.NONE);

对于(int p=1;p操作托盘图标的代码在什么上下文中运行?是否可能阻止UI线程绘制图标?我不确定,但您可能需要在单独的线程上执行此操作。

操作托盘图标的代码在什么上下文中运行?是否可能阻止UI线程绘制图标绘制图标?我不确定,但也许你需要在另一个线程上执行此操作?这不是你要寻找的答案,但作为旁注,你可以用g.fillRect(0,0,percent,img.getWidth())@DavidConrad替换makeImage中的for循环,就是这样..谢谢。请随意作为答案发布,我将accept@ClickUpvote好的,谢谢。
    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);
        }
    }