使用lwjgl如何在任务栏中创建图标?

5

我希望为我的运行中的lwjgl进程在Windows 7上添加一个任务栏图标。

Display.setIcon可以成功更改窗口左上角的图标,但无法更改任务栏中的图标。

该怎么办?

我的代码类似于:

ArrayList<ByteBuffer> byteBuffers = new ArrayList<ByteBuffer>();
byteBuffers.add( ImageHelper.loadImageAsIconImage("stickmanicon32x32.png") );
byteBuffers.add( ImageHelper.loadImageAsIconImage("stickmanicon16x16.png") );
System.out.println( "taskbaricon result: " + Display.setIcon(byteBuffers.toArray(new ByteBuffer[]{})) );

我尝试添加一个40x40的图片,但是没有任何变化。


1
我认为上述问题出在你的toArray调用上。你需要分配一个长度为2的ByteBuffer数组来容纳你的2个缓冲区。你正在创建一个空数组:“new ByteBuffer[] {}”,应该是“new ByteBuffer [2]”。 - thomas88wp
3个回答

5

这段代码对我来说完全正常,不需要额外的库。

ByteBuffer[] list = new ByteBuffer[2];
list[0] = createBuffer(ImageIO.read(new File("src/Images/Tests/icon16.png")));
list[1] = createBuffer(ImageIO.read(new File("src/Images/Tests/icon32.png")));
Display.setIcon(list);

2
这看起来和我的代码一样。你在Windows 7上试过吗? - Hugh Perkins
好的,我现在没时间检查。既然没有人提出更好的解决方案,我会把答案标记为已接受。在我看来,有两种可能性:1. 以前有个错误,现在修复了,在更新的lwjgl版本中已经解决了。2. 你正在使用16和32大小的图标,而我在使用32和16,也就是顺序不同。 - Hugh Perkins

2
这是我在折腾几个小时后找到的结果。
我使用了slick-util库。
Display.setIcon(new ByteBuffer[] {
                    new ImageIOImageData().imageToByteBuffer(ImageIO.read(new File("res/game/gameIcon.png")), false, false, null),
                    new ImageIOImageData().imageToByteBuffer(ImageIO.read(new File("res/game/gameIcon.png")), false, false, null)
                    });

2

你应该看一下J7Goodies,这是一个Java库,提供了许多Windows 7的功能。


2
理想情况下,我希望有一个不需要我付钱的解决方案。 - Hugh Perkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接