2017-02-17 64 views
1

我在这里问了一个问题:NoClassDefFoundError with bluecove's javax.microedition 但没有得到任何答复。NoClassDefFoundError在java中使用蓝牙

我想运行一些需要蓝牙的java代码(Server.java),所以我在C:\ Program Files \ Java中安装了bluecove-2.1.0.jar文件。

我编译我的代码javac -cp "C:\Program Files\Java\bluecove-2.1.0.jar";. Server.javajava Server -cp "C:\Program Files\Java\bluecove-2.1.0.jar"

它编译成功运行,但是当我运行它,我得到的错误:

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 

在那里我已经出了错任何想法?

编辑:继减的回答,来解决随后的错误,我也需要使用这是我从http://snapshot.bluecove.org/distribution/download/2.1.1-SNAPSHOT/2.1.1-SNAPSHOT.63/

+0

当你在java类之前调用​​classpath arg(例如java -cp“blah.bluecove”Server) – mcalex

+0

@mcalex我收到错误'错误:无法找到或加载主类服务器' – w1nter

+0

@ w1nter, 非常感谢你! 2.1.1-SNAPSHOT链接和其中的intelbth_x64.dll解决了我的问题。最新的官方版本2.1.0(2008年)显然太旧了。 –

回答

2

的问题是,.dll文件没有正确地加载下载不同的.jar文件。

该库应包含一个将保存在磁盘上并加载的.dll文件,也许该程序无法将该.dll文件保存到磁盘或无法读取它。

提取.dll并按照bluecove installation instructions原生库位置

例如:

创建一个目录c:\blue和目录blue\lib

把这些文件是这样的:

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

打开CMD(命令提示符)在C:\蓝色

尝试运行这样的应用程序:

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

这样你将在类路径中使用Server.class和bluecove-2.1.0.jar,并在路径中使用DLL(因为在Windows上当前目录在路径中)。

+0

我明白为什么会出现这个问题,但是您需要解压的这个.dll文件在哪里? – w1nter

+0

应该放在jar里面。 Jars只是zip,所以你可以用任何解压缩工具(7zip,izarch ... any)从它们中简单地提取内容。 – minus

+0

好吧,我从.jar文件中提取文件。使用安装说明,我正在执行'java Server -cp“/ path/to/jar”-Dbluecove.native.path =/your/path' should/your/path is'C:/ path/to/dir'或者'C:/ path/to/dll'或甚至''C:/ path/to/dir“或者'C:\ path \ to \ dir'或者其他一些变体? – w1nter

1

添加当前文件夹的类路径(;),并确保你的代码是在包名文件夹。 所以,如果你的服务器有一个包名称: mypackage的 确保你的类代码是在/mypackage的目录 不是去父文件夹/mypackage的,并呼吁:

爪哇 - cp“。; C:\ Program Files \ Java \ bluecove-2.1.0.jar”mypackage.Server

+0

好的,我在一个包含Server.class的目录中。我创建了一个名为serverPackage的目录,并将Server.class放入其中。现在,从当前目录,即serverPackage的父目录,我调用了'java -cp“。C:\ Program Files \ Java \ bluecove-2.1.0.jar”serverPackage.Server'这是你的意思吗?它给出了错误'错误:无法找到或加载主类服务器' – w1nter

+0

您的服务器类中的包名也称为serverPackage? 此文件夹名称必须与您的服务器类的包名称相同,您使用完整的包名称作为呼叫 –

+0

哦,我明白了,我的类文件是独立的,我以前从未使用过包。如果我只是有一个.java文件坐在我通过命令行编译的权限,那应该没有必要?我刚刚有一个关于软件包的小提琴,但现在我甚至无法在试图编译时找到或加载主类服务器 - 最好让这个问题在另一天留下来,如果可能的话,坚持使用简单的.java .class文件 – w1nter