繁体   English   中英

使用.jar小程序加载资源

[英]Loading resources with a .jar 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

当我使用Appletviewer(不带.jar)在Eclipse中运行该程序时,该程序运行良好。 它找到并显示图像。 但是当我用.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”。 我已经测试过是否带有.jar。 我已经测试过将resrc-folder添加到kap12软件包文件夹中。 看来我已经测试了所有内容。 我花了几天的时间试图使它生效。

我应该写什么? 我在StackOverflow上已经阅读了很多关于此的主题,但是没有成功。 谢谢。

更新:我已经测试了您编写的所有内容,但无论如何都找不到。

这是我从-tvf中得到的:

C:\\ Program \\ Java \\ jdk1.7.0_40 \\ bin> jar -tvf D:\\ Path \\ test.jar 25 Jan Jan 20 14:48:14 CET 2014 META-INF / MANIFEST.MF 2035 Mon Jan 20 14:48 :04 CET 2014 pkg / U1.class 496057 Sun Feb 03 15:25:06 CET 2013 resrc / django.jpg

ImageIcon django = createImageIcon("resrc/django.jpg");

应该:

ImageIcon django = createImageIcon("/resrc/django.jpg");

更新

不完全知道该怎么做,但是我从任务管理器中杀死了“ Java SE”,然后删除了旧的.jar文件。 我有一个JOptionPane.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);

我知道我指定的字符串适用于“上下文类加载器”,但是不能从static方法中调用。


如果还是失败,进入命令行(如Windows命令提示符或Linux / UNIX控制台,并提供输出:

> jar -tvf path/to/the/test.jar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM