hab von meinem compiler gerade eine meldung bekommen die ich noch nie vorher gesehen hab...
Java:
java.lang.ClassFormatError:Incompatible magic value 1008813135 in class file MyApplet
at java.lang.ClassLoader.defineClass1(NativeMethod)
at java.lang.ClassLoader.defineClass(UnknownSource)
at java.security.SecureClassLoader.defineClass(UnknownSource)
at sun.plugin2.applet.Applet2ClassLoader.findClass(UnknownSource)
at java.lang.ClassLoader.loadClass(UnknownSource)
at java.lang.ClassLoader.loadClass(UnknownSource)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(UnknownSource)
at sun.plugin2.applet.Plugin2Manager.createApplet(UnknownSource)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(UnknownSource)
at java.lang.Thread.run(UnknownSource)
hab jetzt den code gefunden wo es ihn aufwirft (nach nem recompile bekomm ich aber andere meldungen, kein magic value mehr)
Data.java
[java=316]
Properties p = new Properties();
try {
p.loadFromXML(new ByteArrayInputStream(xml.getBytes()));
} catch (Exception e) {
System.out
.println("Exception raised while reading bytearrayinputstream!");
}
locationName = p.getProperty("locationName", "name not set");
[/code]
p.loadFromXML(...) hier wirfts die exception, warum ist mir nicht klar, da im xml die xml bereits vollständig geladen ist... und weiter als zu der zeile kommt er nicht (hab darunter einmal eine sysout und zu der kommt er nicht mal mehr...)
Java:
Exception in thread "thread applet-tt/at/lumo/net/langames/seatpickerV2/SeatPickerApplet.class-2" javax.xml.parsers.FactoryConfigurationError:Provider<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
at javax.xml.parsers.DocumentBuilderFactory.newInstance(UnknownSource)
at java.util.XMLUtils.getLoadingDoc(UnknownSource)
at java.util.XMLUtils.load(UnknownSource)
at java.util.Properties.loadFromXML(UnknownSource)
at tt.at.lumo.net.langames.seatpickerV2.Data.getLocationFromWeb(Data.java:318)
at tt.at.lumo.net.langames.seatpickerV2.Data.getLocation(Data.java:267)
at tt.at.lumo.net.langames.seatpickerV2.Editor.initLocation(Editor.java:72)
at tt.at.lumo.net.langames.seatpickerV2.SeatPickerApplet.init(SeatPickerApplet.java:64)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(UnknownSource)
at java.lang.Thread.run(UnknownSource)
also auch wenn die funktion getLocationFromWeb heisst... in zeile 318 muss der gar nicht mehr ins netz... denn da hat er schon lange das xml im String xml drin...
Und ob der nochmal ins Netz muss. Um deine XML-Datei zu überprüfen, benötigt er [c]http://java.sun.com/dtd/properties.dtd[/c]. Diese Datei wird offenbar nich gefunden.
zur info, ich habe in die xml reincodiert dass er das dtd nicht von java sun holen soll, sondern von meiner webpage, funktioniert das so, oder kann man das nicht umstellen?
allerdings kommt noch immer der exakt selbe fehler...
-> zugriffsrechte sinds jetzt zumindest nicht mehr :/
Wenn ich mir das ansehe, fange ich gerade an, an meiner Aussage zu zweifeln. Offensichtlicher ist, das deine Properties-Datei nicht gefunden wird. Vllt. bringts was, wenn man zunächst nicht mit XML, sondern, nur um festzustellen, ob der Pfad stimmt, mit Key-Value-Dateien arbeitet.
Offensichtlicher ist, das deine Properties-Datei nicht gefunden wird. Vllt. bringts was, wenn man zunächst nicht mit XML, sondern, nur um festzustellen, ob der Pfad stimmt, mit Key-Value-Dateien arbeitet.
Exception in thread "thread applet-tt/at/lumo/net/langames/seatpickerV2/SeatPickerApplet.class-1" javax.xml.parsers.FactoryConfigurationError: Provider <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
at java.util.XMLUtils.getLoadingDoc(Unknown Source)
at java.util.XMLUtils.load(Unknown Source)
at java.util.Properties.loadFromXML(Unknown Source)
at tt.at.lumo.net.langames.seatpickerV2.Data.getLocationFromWeb(Data.java:318)
at tt.at.lumo.net.langames.seatpickerV2.Data.getLocation(Data.java:267)
at tt.at.lumo.net.langames.seatpickerV2.Editor.initLocation(Editor.java:72)
at tt.at.lumo.net.langames.seatpickerV2.SeatPickerApplet.init(SeatPickerApplet.java:64)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
wie du sehen kannst ist in der ausgabe das komplette xml drin.
und wie bereits erwähnt verwende ich genau die selbe funktion in einer applikation die ich hier lokal starte (eigentlich sind nur die parameter anders zwischen applikation&applet)
:shock: ???:L
edit: die datei muss er ja gar nicht finden, da er ja einen inputstream bekommt... generiert aus einem string(xml)
Hab' mal 'n bissl' recherchiert (hier, hier und hier). Bei folgender Passage (FactoryFinder) ist mir eine Stelle besonders ins Auge gefallen:
Java:
staticObjectnewInstance(String className,ClassLoader cl,boolean doFallback)throwsConfigurationError{try{Class providerClass =getProviderClass(className, cl, doFallback);Object instance = providerClass.newInstance();if(debug){// Extra check to avoid computing cl stringsdPrint("created new instance of "+ providerClass +" using ClassLoader: "+ cl);}return instance;}catch(ClassNotFoundException x){thrownewConfigurationError("Provider "+ className +" not found", x);}catch(Exception x){thrownewConfigurationError("Provider "+ className +" could not be instantiated: "+ x,
x);}}
Hier, Zeile 15: verglichen mit:
Code:
Provider <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
fürchte ich, das die Klassendatei für "javax.xml.parsers.DocumentBuilderFactory" oder "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" nicht gefunden wird. Wirklich seltsam, das er "<!DOCTYPE html..." als Klassennamen verwendet...
fürchte ich, das die Klassendatei für "javax.xml.parsers.DocumentBuilderFactory" oder "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" nicht gefunden wird. Wirklich seltsam, das er "<!DOCTYPE html..." als Klassennamen verwendet...
:bahnhof: Keine Ahnung... Weiss ja nicht mal, wie er an diesen Klassennamen kommt und warum er die Klasse aus dem Netzwerk fischen will. Ein Applet ist doch erst lauffähig, wenn auf dem Clienten eine JVM installiert ist. Möglicherweise genügt ja beim Clienten ein Update der JVM.
@Edit: Kann man das Applet von ausserhalb (also z.B. von meiner Location) erreichen?
:bahnhof: Keine Ahnung... Weiss ja nicht mal, wie er an diesen Klassennamen kommt und warum er die Klasse aus dem Netzwerk fischen will. Ein Applet ist doch erst lauffähig, wenn auf dem Clienten eine JVM installiert ist. Möglicherweise genügt ja beim Clienten ein Update der JVM.
@Edit: Kann man das Applet von ausserhalb (also z.B. von meiner Location) erreichen?
network: Cache-Eintrag nicht gefunden [url: http://langames.uuuq.com/seatpicker/META-INF/services/javax.xml.parsers.DocumentBuilderFactory, Version: null]
network: Verbindung von http://langames.uuuq.com/seatpicker/META-INF/services/javax.xml.parsers.DocumentBuilderFactory mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://langames.uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
network: Cache-Eintrag nicht gefunden [url: http://uuuq.com/404/index.html, Version: null]
network: Verbindung von http://uuuq.com/404/index.html mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
// hier nimmt der Schwachfug seinen Lauf...
network: Cache-Eintrag nicht gefunden [url: http://langames.uuuq.com/seatpicker/%3c!DOCTYPE%20html%20PUBLIC%20%22-//W3C//DTD%20XHTML%201/0%20Transitional//EN%22%20%22http://www/w3/org/TR/xhtml1/DTD/xhtml1-transitional/dtd%22%3e.class, Version: null]
network: Verbindung von http://langames.uuuq.com/seatpicker/%3c!DOCTYPE%20html%20PUBLIC%20%22-//W3C//DTD%20XHTML%201/0%20Transitional//EN%22%20%22http://www/w3/org/TR/xhtml1/DTD/xhtml1-transitional/dtd%22%3e.class mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://langames.uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
network: Cache-Eintrag nicht gefunden [url: http://uuuq.com/404/index.html, Version: null]
network: Verbindung von http://uuuq.com/404/index.html mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
basic: Fortschritts-Listener entfernt: sun.plugin.util.GrayBoxPainter$GrayBoxProgressListener@15d17d7
Exception in thread "thread applet-tt/at/lumo/net/langames/seatpickerV2/SeatPickerApplet.class-2" javax.xml.parsers.FactoryConfigurationError: Provider <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
at java.util.XMLUtils.getLoadingDoc(Unknown Source)
at java.util.XMLUtils.load(Unknown Source)
at java.util.Properties.loadFromXML(Unknown Source)
at tt.at.lumo.net.langames.seatpickerV2.Data.getLocationFromWeb(Data.java:318)
at tt.at.lumo.net.langames.seatpickerV2.Data.getLocation(Data.java:267)
at tt.at.lumo.net.langames.seatpickerV2.Editor.initLocation(Editor.java:72)
at tt.at.lumo.net.langames.seatpickerV2.SeatPickerApplet.init(SeatPickerApplet.java:64)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Was immer noch ein Rätsel ist, warum er die Klasse aus dem Netzwerk fischen will, zumal sie in meiner JVM (JRE1.6.0_15) vorhanden ist. Kann es sein, das das im Applet-META_INF-Ordner ein entsprechender Eintrag existiert, der falsch verlinkt?
das ist in meiner manifest file, sonst nichts...
hab da nichts spezielles eingetragen dass er sich irgendwas aus dem netz holen sollte...
bin planlos...
Hab' zwar den Quelltext nicht, aber 'ne Idee. Möglicherweise fehlt dort kein "repaint()", sondern die vorhandenen werden innerhalb des falschen Panels (eines unterhalb des Applets) aufgerufen, weswegen die "paint()"-Methode des Applets nicht beachtet wird. Also eine Instanz des Applets in diesem Panel verfügbar machen und "applet.repaint()" statt simpelst "repaint()" aufrufen.
Hmmm... Ob das Applet noch irgendeinen Parent-Container hat? Vllt. mal eine Instanzvariable der obersten Component (top) anlegen und vom Applet aus dessen repaint() Methode aufrufen. Dazu die addNotify()-Methode des Applets überschreiben.
Java:
privateComponent top;publicvoidaddNotify(){super.addNotify();
top = applet
while(top.getParent()!=null){
top = top.getParent();}}