我制作了一个简单的applet,它加载了包含在中的图像。我制作的jar文件。该项目有一个名为“kap12”的包和一个名为“U1”的类。我有一个名为“resrc”的文件夹,其中包含我的图像。此文件夹位于根目录中(与kap12文件夹相同)。
这是目录结构:
test.jar
*kap12
-U1.class
*resrc
-django.jpg
test.html //outside the .jar, same folder as where test.jar is located
当我在Eclipse中使用Appletviewer(没有.jar)运行该程序时,它运行得很好。它定位并显示图像。但当我用html运行它时。然后程序就找不到了。我每次都会遇到nullpointer异常。这是我的。html:
<HTML>
<HEAD>
</HEAD>
<TITLE> U1 </TITLE>
<BODY BGCOLOR="EEEEEE">
<CENTER>
<P ALIGN=CENTER>
<APPLET code="kap12/U1.class"
archive="test.jar"
width="1280"
height="720">
</APPLET>
</P>
</CENTER>
</BODY>
</HTML>
这是我的SSCCE:
package kap12;
import java.awt.FlowLayout;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JLabel;
public class U1 extends JApplet {
JLabel lbl0;
JLabel img0;
URL imgURL;
ImageIcon django = createImageIcon("resrc/django.jpg");
public void init() {
setLayout(new FlowLayout());
lbl0 = new JLabel("Test");
img0 = new JLabel(django);
getContentPane().add(img0);
getContentPane().add(lbl0);
img0.setVisible(true);
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = U1.class.getClassLoader().getResource(path);
if (imgURL != null) {
System.out.println(""+imgURL);
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
}
我已经使用getClass()和getClass()进行了测试。getClassLoader()。我已经测试过在字符串路径中写入“/resrc/django.jpg”。我测试过有无。罐子我已经测试过将resrc文件夹添加到kap12包文件夹中。看来我什么都试过了。我花了好几天的时间想让它发挥作用。
我应该写什么?我在StackOverflow上读了很多关于这个的帖子,但没有成功。谢谢
更新:我已经测试了你写给Andrew的所有内容,但无论如何都找不到。
这是我从tvf得到的:
C: \程序\ Java\jdk1.7.0\U 40\bin
ImageIcon django = createImageIcon("resrc/django.jpg");
应为:
ImageIcon django = createImageIcon("/resrc/django.jpg");
我不知道如何做到这一点,但我从Task Manager中删除了“Java SE”,然后删除了旧的。jar文件。我有一个作业窗格。showMessageDialog显示“字符串路径”包含的内容,似乎更新得很好。
好的,“更新很好”是重要的部分。每次测试都要做同样的事情。
刚刚注意到加载方法的细节:
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = U1.class.getClassLoader().getResource(path);
更安全的做法是:
protected ImageIcon createImageIcon(String path) {
java.net.URL imgURL = this.getClass().getResource(path);
我知道我指定的字符串适用于“上下文类加载器”,但不能从静态方法调用它。
如果仍然失败,请转到命令行(例如Windows命令提示符或Linux/Unix控制台),并提供以下输出:
> jar -tvf path/to/the/test.jar
在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。 使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没
问题内容: 在Eclipse中,当我运行代码时,此方法有效: 这是我的Package Explorer中的文件结构: 此外,此工作空间位于Z:\ eclipse_projects中 我可以看到 ImageIcon图标= new ImageIcon(“ src / Action-exit-icon.png”); 运行良好,而menuBar可以完成工作。 现在,我们导出该项目,然后我将JAR通过电子邮
我在maven项目的src/main/resource文件夹中下载了.sh文件,我正在通过下面的代码阅读它 如果我使用jar EX作为应用程序运行:- java-jar runscript.jar SCHEMA_NAME /users/ideaprojects/runscript/target/file:/users/ideaprojects/runscript/target/runscripts
背景知识 所有网络交流都是在主浏览器进程处理的。这样浏览器进程不仅可以控制每个渲染器的网络访问,还可以在进程间维持session状态一致性,像cookie和缓存数据。另一个重要的原因是,作为一个HTTP/1.1的用户代理,浏览器整体上在每个host上不能打开太多连接。 概述 我们的多进程应用程序可以从三个层面来看。在最底层是WebKit库,用来渲染页面。在它上面是渲染器进程(简单地,每个标签页对应
问题内容: 在我的应用程序中,我以这种方式加载资源: 这给了我: 当我从IDE运行我的应用程序时,但是当我运行应用程序的jar时,这可以很好地工作: 路径变为: 有什么办法解决这个问题? 我将使用“存储库”目录名称来创建此目录: 以相同的方式,我将获得一个文件名(而不是目录),并以这种方式使用它: 问题答案: 听起来你正在尝试使用或类似方法加载资源。不要那样做:不要调用,而是从中调用并读取数据。
和调用方法的位置: