Warum bekommen ich bei meinem JApplet (JRE 1.3.1_01) eine Nullpointer
Exception beim Methodenaufruf getDocumentBase().
Grüße,
B. Kantwerk.
In welchem Browser/Appletviewer laesst Du das denn laufen?
Gruesse, Lothar
Der Fehler tritt im IE 6 sowie im Appletviewer des JDK 1.3.1_01 auf. Zur
weiteren Info: das ganze soll (a) eine Applikation und (b) ein Applet
werden. Da ich properties zur Konfiguration verwende, liegt die
Properties-Datei also entweder lokal (mit java -DPropertiesFile=...) oder in
der Codebase.
Es gibt zwei Konstrukturen für die Applikation:
public MainFrame() {
PropertiesLoader.loadProperties();
init();
}
public MainFrame(JApplet applet) {
PropertiesLoader.loadProperties(applet);
init();
}
Die zweite wird dementsprechend durch
MainFrame mainFrame = new MainFrame(this);
im JApplet initialisiert.
In loadProperties tritt der oben beschriebene Fehler dann auf:
public static void loadProperties(JApplet currentApplet) {
String fullFileName = "";
properties = new Properties();
if (currentApplet != null) {
fullFileName = currentApplet.getDocumentBase() +
propertiesFilename;
} else {
fullFileName = "file:///" +
System.getProperty("PropertiesFile");
}
Nach meiner Erfahrung brauchst du zum Testen des Applets einen lokal
installierten Webserver und mußt das Applet über den Webserver beziehen.
Ansonsten hat das Applet keinen AppletContext/AppletStub, wodurch
getDocumentBase und ein paar andere Funktionen auf einen Nullpointer
auflaufen.
Jörn
Ich habe hier Entwicklungsmaschinen. Ich beziehe das Applet über mein LAN
von Linux / Apache. Daran kann es also nicht liegen.
machs doch sauberer mit
this(null);
dann brauchst Du das Zeug nicht zweimal schreiben.
> if (currentApplet != null) {
> fullFileName = currentApplet.getDocumentBase() +
> propertiesFilename;
Wie genau ist denn der StackTrace? Tritt der wirklich innerhalb
von getDocumentBase() auf?
Gruesse, Lothar
Habe zur Fehlersuche mittlerweile nur folgendes JApplet:
public HTApplet() {
initMyComponents();
}
private void initMyComponents() {
try {
getAppletContext().showDocument((new
java.net.URL("http://blalbla/")),"_blank");
} catch (Exception e) {
e.printStackTrace();
}
}
Stacktrace:
java.lang.NullPointerException
at java.applet.Applet.getAppletContext(Unknown Source)
at com.orworld.hypertree.HTApplet.initMyComponents(HTApplet.java:32)
at com.orworld.hypertree.HTApplet.<init>(HTApplet.java:22)
at java.lang.Class.newInstance0(Native Method)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Lass mal die Init-Sachen aus dem Konstruktor heraus. Die
Methode, die bei einem Applet interessant ist, ist die
init()-Methode. Ich kann mir vorstellen, dass AppletStub
und AppletContext erst nach der Initialisierung vom
Viewer gesetzt werden und Du damit bei einem getDocumentBase
oder showDocument innerhalb des Konstruktors (oder in
Methoden, die vom Konstruktor aufgerufen werden) auf
Probleme stossen wirst.
Statt
> public HTApplet() {
> initMyComponents();
> }
mach
public init(){
initMyComponents();
}
Gruesse, Lothar
Lothar Kimmeringer wrote:
>
> public init(){
> initMyComponents();
> }
Besser
public init(){
super.init();
initMyComponents();
}
Gruesse, Lothar
GENAU!!!
Ich danke Dir recht herzlich für Deine Hilfe.
Grüße Boris.