Я сделал простой апплет, который загружает изображение, включенное в .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 с .jar, программа не может его найти. Я получаю исключение нулевого указателя каждый раз. Вот мой .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" в пути String. Я тестировал с .jar и без него. Я протестировал добавление папки resrc в папку пакета kap12. Вроде все перепробовал. Я потратил дни, пытаясь заставить это работать.
Что я должен написать? Я читал много тем об этом здесь, в StackOverflow, но безуспешно. Спасибо.
Обновление: я проверил все, что вы написали, Эндрю, но все равно не нашел.
Это то, что я получил от -tvf:
C:\Program\Java\jdk1.7.0_40\bin>jar -tvf D:\Path\test.jar 25 пн 20 янв 14:48:14 CET 2014 META-INF/MANIFEST.MF 2035 пн 20 янв 14:48 :04 CET 2014 pkg/U1.class 496057 Вс 03 фев 15:25:06 CET 2013 resrc/django.jpg