2017-02-17 2 views
1

Ich habe eine Frage früher hier gestellt: NoClassDefFoundError with bluecove's javax.microedition aber habe keine Antworten.NoClassDefFoundError mit Bluetooth in Java

Ich versuche, einige Java-Code (Server.java), die Bluetooth benötigt ausführen, so dass ich die Bluecove-2.1.0.jar-Datei in C: \ Programme \ Java installiert.

ich kompilieren meinen Code mit javac -cp "C:\Program Files\Java\bluecove-2.1.0.jar";. Server.java und führen Sie es mit java Server -cp "C:\Program Files\Java\bluecove-2.1.0.jar"

Es kompiliert erfolgreich, aber wenn ich es laufen lasse, erhalte ich die Fehlermeldung:

Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.NoClassDefFoundError: javax/microedition/io/Connection 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.privateGetMethodRecursive(Unknown Source) 
    at java.lang.Class.getMethod0(Unknown Source) 
    at java.lang.Class.getMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javax.microedition.io.Connection 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 7 more 

Irgendwelche Ideen, wo ich falsch gegangen?

EDIT: Nach Minus' Antwort, um den Fehler zu beheben, die folgte, habe ich auch eine andere .jar-Datei zu verwenden, benötigt die ich von http://snapshot.bluecove.org/distribution/download/2.1.1-SNAPSHOT/2.1.1-SNAPSHOT.63/ heruntergeladen

+0

was passiert, wenn Sie den Klassenpfad arg vor der Java-Klasse aufrufen (zB java -cp "blah.bluecove" Server) – mcalex

+0

@mcalex Ich bekomme den Fehler "Fehler: Konnte Hauptklasse Server nicht finden oder laden" – w1nter

+0

@ w1nter, vielen Dank! Dieser 2.1.1-SNAPSHOT Link und die 'intellbth_x64.dll' darin löst mein Problem. Die letzte offizielle Version 2.1.0 (in 2008) ist offensichtlich zu alt. –

Antwort

2

Das Problem ist, dass die DLL nicht korrekt geladen wird.

Die Bibliothek sollte eine .dll enthalten, die auf der Festplatte gespeichert und geladen wird, möglicherweise kann das Programm die .dll nicht auf der Festplatte speichern oder nicht lesen.

Entpacken Sie die .dll und folgen Sie bluecove installation instructions auf Native Bibliothek Speicherort.

Zum Beispiel:

Erstellen Sie ein Verzeichnis c:\blue, und ein Verzeichnis blue\lib.

Legen Sie die Dateien wie folgen aus:

C:\blue\Sever.java 
C:\blue\Sever.class 
C:\blue\[bluecove_native_library].dll 
C:\blue\lib\bluecove-2.1.0.jar 

Öffnen ein cmd (Eingabeaufforderung) auf c: \ blau

Versuchen Sie, die App wie diese auszuführen:

java -cp .;lib\bluecove-2.1.0.jar -Dbluecove.native.resource=false Server 

Auf diese Weise Sie werden sowohl Server.class als auch bluecove-2.1.0.jar in classpath und die DLL im Pfad haben (da unter Windows das aktuelle Verzeichnis im Pfad ist).

+0

Ich verstehe, warum das das Problem wäre, aber wo ist diese .dll-Datei, von der Sie sprechen, die ich extrahieren muss – w1nter

+0

Sollte in dem Glas sein. Jars sind nur Zip-Dateien, so dass Sie Inhalte einfach mit einem beliebigen Unzip-Tool (7zip, izarch ... any) extrahieren können. – minus

+0

Ok, also habe ich die Dateien aus der .jar-Datei extrahiert. Mit den Installationsanweisungen mache ich 'java Server -cp"/Pfad/zu/jar "-Dbluecove.native.path =/Ihr/Pfad' sollte/Ihr/Pfad 'C:/Pfad/zu/Verzeichnis' sein 'C:/path/to/dll' oder sogar' "C:/path/to/dir" 'oder' C: \ path \ to \ dir' oder eine andere Variante? – w1nter

1

einen aktuellen Ordner in einem Classpath hinzufügen (;). und stellen Sie sicher, dass Ihr Code in einem Paket-Namen Ordner ist. Also, wenn Ihr Server einen Paketnamen hat: mypackage sicherstellen, dass Ihr Klassencode in einem ist/mypackage Verzeichnis als gehen zu einem übergeordneten Ordner zu /mypackage und rufen:

java - cp ".; C: \ Programme \ Java \ bluecove-2.1.0.jar" mypackage.Server

+0

Ok, ich bin in einem Verzeichnis mit Server.class drin. Ich habe ein Verzeichnis namens serverPackage erstellt und Server.class darin eingefügt. Nun, aus dem aktuellen Verzeichnis, d. H. Das übergeordnete Verzeichnis von serverPackage, rief ich 'java -cp '.; C: \ Programme \ Java \ bluecove-2.1.0.jar" serverPackage.Server "Ist das was du meintest? Es gab den Fehler "Fehler: Hauptklasse Server konnte nicht gefunden oder geladen werden" – w1nter

+0

Ist Ihr Paketname in der Server-Klasse auch serverPackage? Dieser Ordnername muss mit dem Paketnamen für die Serverklasse identisch sein. Sie verwenden einen vollständigen Paketnamen für den Aufruf. –

+0

Oh, ich sehe, meine Klassendatei war eigenständig, ich habe noch nie zuvor Pakete verwendet. Das sollte nicht notwendig sein, wenn ich gerade eine .java-Datei habe, über die ich über die Befehlszeile kompiliert habe, oder? Ich habe gerade mit Paketen herumgespielt, aber jetzt kann ich nicht einmal "Main Class Server" finden oder laden, wenn ich versuche, es zu kompilieren - am besten lassen Sie dieses Problem für einen anderen Tag und bleiben Sie mit einfachen .java .class-Dateien wenn möglich – w1nter

Verwandte Themen