从 jar 中加载图像以用于 Swing HTML

Posted

技术标签:

【中文标题】从 jar 中加载图像以用于 Swing HTML【英文标题】:Loading images from jars for Swing HTML 【发布时间】:2011-09-16 10:44:35 【问题描述】:

虽然this answer 可以为ImageIcons 从Jar 文件加载图像,但我似乎无法为Swing html 中引用的图像找到正确的路径。

当资源未捆绑到 jar 中时,这会在 Swing HTML 中显示图像:

new JLabel("<html><table cellpadding=0><tr><td><img src='file:icons/folder_link.png'></td></tr><tr><td>100</td></tr></table></html>") );

在 jar 内部,图片可以成功引用(并显示)到ImageIcon

Icon topIcon = new ImageIcon( getClass().getResource("icons/folder_link.png" ) );

但是,我尝试将 getResource 技术用于 Swing HTML 并不起作用。

String p = getClass().getResource("icons/folder_link.png" ).getPath();
new JLabel("<html><table cellpadding=0><tr><td><img src='" + p + "'></td></tr><tr><td>100</td></tr></table></html>") );

秘诀是什么?

【问题讨论】:

【参考方案1】:

如果没有实际尝试过,我会假设如果您在 HTML 代码中包含资源 URL,HTML 渲染器可以访问您的图像:

String p = getClass().getResource("icons/folder_link.png" ).toString();
new JLabel("<html><table cellpadding=0><tr><td><img src='" + p + "'></td></tr><tr><td>100</td></tr></table></html>") );

【讨论】:

另外,不要忘记将 url 括在撇号中(像我一样)。奇怪的是,没有撇号,它在 Eclipse 中有效,但在捆绑在 jar 中时无效。【参考方案2】:

网址是秘密

试试这个伙伴:

URL p = getClass().getResource("icons/folder_link.png" );
new JLabel("<html><table cellpadding=0><tr><td><img src='" + p + "'></td></tr><tr><td>100</td></tr></table></html>") );

那么你也可以这样做:

Icon topIcon = new ImageIcon(p);

然后将此图标设置为您的 JLabel 的图标,如果您想这样做!

【讨论】:

您的答案将 URL 对象转换为字符串()。【参考方案3】:

因为即使是来自 Sun 的在 Swing 中使用 HTML 的 original demo 也没有在 HTML 中嵌入图像(用于生成带有 图像图标的按钮),我怀疑是否支持在地方。我记得某处有读者“有限的 HTML 子集”,但现在找不到参考。

编辑:请查看 Andrew 的评论和回答,它确实有效。

【讨论】:

“我怀疑是否支持在适当位置显示图像。”虽然JEditorPane 只会显示有限的 HTML 子集和简单的 CSS——但你离那里很远。看我的例子。【参考方案4】:

答案扩展并移至Is it possible/how to embed and access HTML Files in a JAR?

【讨论】:

以上是关于从 jar 中加载图像以用于 Swing HTML的主要内容,如果未能解决你的问题,请参考以下文章

在OpenGL中加载图像以用于GIS应用程序

如何从资源位图文件中加载图像数据以进行 directshow 过滤器?

以编程方式在图像中加载纹理并将边框设置为图像 Unity

等待图像在 JavaScript 中加载

如何在 Jframe java(eclipse) 中加载图像?

如何快速从解析中加载图像?