问题:当在windows平台上本地运行时,Java小程序无法加载位于其jar内的资源。如果从web服务器启动而不是本地启动,或者如果在linux系统上本地启动,则相同的小程序可以加载资源。在所有情况下,小程序都是使用小程序标记启动的。
复制的步骤
1) 构建下面的小程序类代码,并创建一个包含以下内容的jar:
以下是指向我使用的图像png文件的链接:http://flexibleretirementplanner.com/java/java-test/iconimg.png
文件测试。html有一行:
<h1>Text from test.html file</h1>
2) 创建启动。html与测试位于同一文件夹中。jar如下:
<html><center><title>Test Applet</title><applet
archive = "test.jar"
code = "TestApplet.class"
name = "Test Applet"
width = "250"
height = "150"
hspace = "0"
vspace = "0"
align = "middle"
mayscript = "true"
></applet></center></html>
3)test.jar和launch.html在同一个本地文件夹中,点击launch.html
4) 请注意,getResource()调用imgicon。png和测试。html都返回null。
5) 上载启动。html和测试。jar到web服务器并加载启动。请注意,找到了这些资源。
测试应用程序。Java语言
import java.applet.AppletContext;
import java.io.IOException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestApplet extends JApplet {
public TestApplet() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void init() {
JPanel topPanel = new JPanel();
JLabel iconLabel;
URL url = TestApplet.class.getClassLoader().getResource("iconimg.png");
if (url != null)
iconLabel = new JLabel(new ImageIcon(url));
else
iconLabel = new JLabel("getResource(iconimg.png)==null");
topPanel.add(iconLabel);
URL url2;
url2 = TestApplet.class.getClassLoader().getResource("test.html");
if (url2 == null) {
JLabel errorLabel = new JLabel("getResource(test.html) == null");
topPanel.add(errorLabel);
} else {
try {
JEditorPane htmlPane = new JEditorPane(url2);
topPanel.add(htmlPane);
} catch (IOException ioe) {
System.err.println("Error displaying " + url2);
}
}
getContentPane().add(topPanel);
}
private void jbInit() throws Exception { }
}
在进一步研究并发现这是一个仅限windows的问题后,我将此称为已回答的问题。
几乎可以肯定这是一个java 1.7.0.25 bug。小程序在web服务器上运行良好,在虚拟Ubuntu系统(在windows上使用VirtualBox)上本地运行良好。希望我提交的bug报告能对java人员有所帮助。
感谢您的回复。顺便说一句,是Joop关于区分大小写的评论促使我测试linux系统只是为了好玩。谢谢你!
Oracle已决定修改getDocumentBase()、getCodeBase()和getResource()的行为,因为自Windows上1.7.0\u 25以来的安全原因:http://www.duckware.com/tech/java-security-clusterfuck.html
似乎有很多关于这个变化的讨论,因为它破坏了一些重要的有效和安全的用例。
我正在使用一个在线编译器来运行这个简单的代码,但是它给出了一个运行时错误,“Could not find or load class main”没有其他语法错误。请提出解决方案。
我正在做一个项目,编译并运行我的IDE工作正常。所有资源都找到了,它正常工作。然而,当我构建我的. jar时,它能够找到一些资源,但不是全部。我的项目结构看起来是这样的: 当我运行jar文件时,它能够找到图像并使用它们,但是当我尝试访问html文件时,它不会打开。下面是jar的项目结构; 我以前从未处理过jar文件,所以这似乎是我犯的一个非常明显的错误。感谢您的帮助,谢谢! 编辑:访问找不到的文件
我有一个程序,必须从终端界面播放声音。 代码相当简单,如下所示: 该文件位于“我的源路径”中的“音乐”文件夹中。 当我在eclipse中运行程序时,所有工作都非常好。但是如果我将其导出到. jar文件中并在windows cmd中尝试它,我会收到这条消息 [编辑]音频文件确实已打包到中。jar,但它仍然不起作用。 是否有可能播放来自windows提示符的声音?如果没有,是否有这样的声音? 谢谢Si
我一直试图提交一个简单的python脚本,以便在一个带有Yarn的集群中运行它。当我在本地执行作业时,没有问题,一切都很好,但当我在集群中运行它时,它就失败了。 诊断:文件不存在:hdfs://myserver:8020/user/josholsan/.sparkstaging/application_1510046813642_0010/test.py 我不知道为什么它找不到test.py,我也
我有一个可运行的jar文件,无法访问位于默认src目录之外的资源。根据我的理解,这两门课的区别是什么。getResource()和ClassLoader。getResource(),我应该能够访问root/res/img/img1。png(请参阅下面的文件夹设置),方法是使用以下getResourceFile函数: 文件夹设置: 当我尝试执行jar可执行文件本身时,问题就出现了。然而,奇怪的是,我
SRC: 主要: HTML: 2018-09-21 10:47:15.253错误4048---[nio-8080-exec-1]org.THYMELEAF.TemplateEngine:[THYMELEAF][http-nio-8080-exec-1]异常处理模板“index”:解决模板“index”时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问 TemplateInputExce