Проблема: Java-апплет не может загружать ресурсы, расположенные внутри его jar-файла, при локальном запуске на платформах Windows. Тот же самый апплет может загружать ресурсы, если он запускается с веб-сервера, а не запускается локально, или если он запускается локально в системе Linux. Во всех случаях апплет запускается с использованием тега апплета.
Действия по воспроизведению
1) Создайте код класса апплета ниже и создайте банку, содержащую следующее:
- TestApplet.class
- iconimg.png
- test.html
- Папка META-INF (стандартный манифест с одной строкой: "Manifest-Version: 1.0")
Вот ссылка на файл изображения png, который я использовал: http://fflexibleretirementplanner.com/java/java-test/iconimg.png
В файле test.html одна строка:
<h1>Text from test.html file</h1>
2) создайте launch.html в той же папке, что и test.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 и test.html возвращают значение null.
5) Загрузите launch.html и test.jar на веб-сервер, загрузите launch.html и обратите внимание, что ресурсы найдены.
TestApplet.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 { }
}
TestApplet.class.getResource("/test.html");
. Проверить именование с учетом регистра; особенно Apache может находить имена в неправильном регистре. - person Joop Eggen   schedule 10.07.2013