从eclipse运行Java应用程序时,我的ImageIcon显示得很好.
但是在创建了一个jar之后,图像的路径显然被搞砸了.
有没有办法在运行时从jar中提取图像,以便我可以打开它?或者,有更好的方法吗?
如果可能的话,我想分发一个jar文件.
我有一个通过这种方式创建的JEditorPane:
JEditorPane pane = new JEditorPane("text/html", "<font face='Arial'>" + my_text_to_show + "<img src='/root/img.gif'/>" + "</font>");
Run Code Online (Sandbox Code Playgroud)
我将此窗格放在JFrame上.
文字显示正确,但我看不到图片,只有一个正方形表示应该有一个图像(即:未找到图片时浏览器显示的"破碎图像")
我现在有点受阻:我写了一个非常复杂的Java桌面应用程序(没有Applet/Web App!),它有自己的"用户手册".本手册包含一些HTML和JPG文件.本手册使用JEditorPane显示在我的应用程序的"帮助菜单"中.
到现在为止还挺好.只要我使用Eclipse启动Programm,这种方法就可以正常工作.只要我将部署版本创建为可运行的jar(使用launch4j将其包装到.exe中),HTML"Viewer"就无法显示用户手册(图像丢失).
我明白为什么会发生这种情况,但我不知道如何解决/规避这个问题.
我的应用程序通过getClass().getResource()加载其资源(属性文件,图标等).例子:
this.setIconImage(new ImageIcon(getClass().getResource("/images/dialog-question.png")).getImage());
stream = new BufferedInputStream(MABIUpdater.class.getResourceAsStream("/settings.properties"));
Run Code Online (Sandbox Code Playgroud)
就像我之前说的那样,这确实很有效(从Eclipse OR中启动App作为包装的可执行文件或runnable-jar.
所以我试图像这样访问我的HTML"手册":
File manual = new File(getClass().getResource("/manual/help.html").toURI());
jEditorPane.setPage(manual.toURI().toURL());
Run Code Online (Sandbox Code Playgroud)
这不起作用.通过Eclipse启动程序我看到手册但缺少图像.通过jar/exe启动它我得到一个空框架.
那么如何实现这一目标还有什么"诀窍"呢?我猜一个问题是HTML页面本身,因为它无法访问该jar中的链接图像.这是一个非常小的HTML文件示例(无法使用图像):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html lang="de">
<head>
<title>Manual</title>
</head>
<body>
<h1>Example: </h1>
<p>fubar</p>
<img style="display: block; text-align: center;" src="../manual/img/Shot01.png" width="666" height="644" border="0" alt="Bildtext">
<p><a href=\"http://www.google.com/\">blablubb</a></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我希望我的问题很明确,有人有想法;).
编辑:所有必需的HTML文件和图像都在JAR文件/类路径中.(只是为了让这个更清楚)