ExceptionInInitializerError

BitBoy

Aktives Mitglied
Hallo,
ich geh mal wieder die Wände hoch, warsch wie immer, irgendwas übersehen???:L

Ich versuche, meine erstes Applet in einem Browser zu öffnen.
Im Applet viewer bei Eclipse, nicht im Browser, läuft es fein, keine Fehler.
Nach dem kompilieren, friert mir der Browser ein u. gibt mir...

Code:
Caused by: java.lang.ExceptionInInitializerError
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)

Das steht jede Menge, aber das scheint der Punkt zu sein. Die DB ist bei Entwicklung u. bei Apache dieselbe und funktioniert und ist auch richtig über localhost ansprechbar.

Was hab ich evtl übersehen.
Lechze nach jedem Hinweis, Danke
 
Zuletzt bearbeitet von einem Moderator:

XHelp

Top Contributor
Die Exception fliegt, wenn im statischen Initialisierer irgendwas schiefgegangen ist. Das scheint jedoch nicht der Knackpunkt zu sein.
Wieso willst du überhaupt vom Applet aus auf eine Datenbank zugreifen? Erscheint mir etwas... falsch.
 

BitBoy

Aktives Mitglied
Gerne, wollt nur nicht gleich zu beginn zuviel wischwasch posten. Ich bin nicht so gut mit Stacks auslesen. Aber mir scheint , das er aus irgendeinem Grund, den Treiber nicht findet :(

Code:
ava.lang.RuntimeException: java.lang.ExceptionInInitializerError
	at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at starter.<init>(starter.java:119)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission file.encoding read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at com.mysql.jdbc.StringUtils.<clinit>(StringUtils.java:70)
	... 19 more
Ausnahme: java.lang.RuntimeException: java.lang.ExceptionInInitializerError
 

Plopo

Bekanntes Mitglied
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission file.encoding read)

Scheint als würden dir Berechtigungen fehlen.

Vll. kann er deshalb nicht die Treiber auslesen und die 2. Exception fliegt.

Welches Betriebssystem hast du?
Bist du als Admin angemeldet?
Als Administrator mal ausgeführt?
 
G

Gast2

Gast
StringUtils versuchst da scheinbar die Systemproperty
Code:
file.encoding
auszulesen, was dein Applet anscheinend nicht darf. Versuch mal das Applet zu signieren.

EDIT:
Was ist daran absurd, Applet Daten über eine Datenbank zu lesen ?
Das Applet läuft auf dem Client, das heißt der Client muss die Zugangsdaten zur Datenbank kennen um sich zu verbinden. Das heißt dass JEDER die Zugangsdaten zu deiner Datenbank kennt ;)
 

BitBoy

Aktives Mitglied
@Eikeb, das mit dem signieren, hatte ich gehört. Da war eine ImageIO Funktion wo Files bekommen hat, dann hies es, daßß Applets nicht gern mit lokalem Filesystem arbeiten und habe es dann alls url übergeben, nur danach, kam ich nicht mehr an die Fehler Meldung, weil wie gesagt, der Browser komplett einfreirt.

@Plopo. Windowsxp, XAMP (da bin ich immer alls Admin), mysql auch Admin kein passwort. Kann mit PHP wunderbar zugreifen.
 

BitBoy

Aktives Mitglied
Das Applet läuft auf dem Client, das heißt der Client muss die Zugangsdaten zur Datenbank kennen um sich zu verbinden. Das heißt dass JEDER die Zugangsdaten zu deiner Datenbank kennt
Uuups... was währ den sicherer und doch nur Hacker kriegens raus. Ich habe ja keine Public Strings mit den Daten greifbar....oder..???:L
 
G

Gast2

Gast
Sobald in deinem Code irgendwo mal die DB Daten auftauchen kann man die im Handumdrehen mit nem decompiler ganz simpel rauslesen.
Üblicherweise macht man es so dass das Applet mit nem Webservice in Kontakt tritt und die DB Operationen darüber laufen.
 

BitBoy

Aktives Mitglied
Webservice? Allso praktisch, ein weiteres Java Programm dass auf dem Server läuft und abgefragt wird statt die DB. Ich bin schockiert erstmal:shock: , dachte das währ das normalste überhaupt, mit einem Applet eine DB abzufragen...ächz, das muß ich ja komplett umdenken
 

Plopo

Bekanntes Mitglied
Wenn ich eine Android App entwickel, die Zugriff auf eine online DB benötigt, kennt die App keine Informationen über die DB.
Die App ruft lediglich eine PHP-Datei auf und diese gibt, je nach angeforderter Opteration der App, einen JSON-String mit dem Inhalt wieder.
Dieser String wird dann von der App ausgelesen und verarbeitet.

So kann man zwar mit den richtigen PhP Variablen und Parametern die DB auslesen (z.B. News).
Aber das kann man auch in der App (halt grafisch aufbereitet).

Also brauchst du keinen Java Programm, sondern eine PhP-Datei die (je nach Parameter) Daten aus der DB ausliest und als JSON String zurückliefert.

PS: Muss nicht umbedigt JSON sein, kannst auch XML oder sonst was nehmen. :)
 

BitBoy

Aktives Mitglied
Plopo, hast mich grad erleichtert. Da hab ich das ganze wohl etwas leichtfertig angegangen. Allso eine PHP, die Daten auslesen lasen für die DB, macht Sinn :toll: PHP, krieg ich eigentlich hin. Muss dann noch rausfinden, wie mein Applet mit PHP kommuniziert, hab da glaub schon mal was gelesen.
 
D

DeCompiler

Gast
@TO
Alleine das sehr naive Konzept dem Client etwas in die Hand zu geben was vertrauliche LogIn-Daten zu was auch immer für einem Service enthält ist schon mal grundlegend der falsche Ansatz. Denn gleich wie du die Zugangsdaten "sicherst", es ist immer möglich daraus wieder plain-Daten zu machen, denn zur Runtime muss es die VM ja auch verstehen.
Und in der Regel reicht es sogar wenn man einfach einen DeCompiler drüber laufen lässt um wieder halbwegs vollständigen Source zu erhalten. Auch ein Obfuscator bringt nicht viel da "Security-through-Obscurity" noch nicht mal in der Theorie richtig funktioniert und in Java die VM nun mal gültigen Bytecode erwartet. Also ist es auch möglich irgendwas "verschlüsseltes" wieder auszulesen da ja irgendwo der Schlüssel und die Methode im Code enthalten sind eben damit die VM zur Runtime aus dem verschlüsselten Kram gültigen Bytecode lesen kann.

Mal ganz davon abgesehen sind die meisten Datenbanken so konfiguriert das man auf diese gar nicht von außen zugreifen kann. Oder besser : zumindest sollten sie das sein. Denn dadurch werden Remote-Angriffe schon komplett ausgeschlossen (zumindest direkt gegen die Datenbank).

Wie bereits erwähnt verwendet man für sowas sog. WebServices. Das sind Services die auf dem Server laufen und die direkte Arbeit übernehmen. Ein solcher Service nimmt eine Anfrage von einem Clienten entgegen, prüft diese auf Gültigkeit, führt diese aus und gibt das Ergebnis zurück an den Clienten. Das hat mehrere Vorteile : nicht nur das man die Anfrage überprüfen kann (GooGLe : SQL Injection) sondern auch das dem User die eigentlichen Zugangsdaten verborgen bleiben.
Wie man einen solchen WebService realisiert ist ziemlich unterschiedlich : es reicht von einfachen PHP-Files über Application-Server bis hin zu komplett selbst implementierten Server-Diensten.

Aber eine direkte Verbindung Client <-> Daten sollte man immer vermeiden, alleine aus Sicherheitsgründen und Missbrauchsschutz.
 

BitBoy

Aktives Mitglied
@DeCompiler
dir auch danke für Deine kurze Einführung.
Habe mir alles selbst beigebracht u. schlaflose Nächte, um einen Java connector Treiber zu finden installieren u. auch noch zu benutzen. Jetzt weis ich warum das so kompliziert ist mit Java (weil mans eh nicht braucht) im Gegensatz zu eben PHP (wo ichs ja schon etlich mal gemacht hab).
Bin froh, dass das einen Fehler auslöst, sonst hätte ich unwissend, die unsichersten Applets gemacht überhaupt.
..Werd jetzt ersmal (wieder mal) alles umschreiben, aber wird langasm....:)
 

Ähnliche Java Themen


Oben