0

我正在构建需要通过串行端口与读卡器交互的桌面 JavaFX 2.0 应用程序。所以我使用的是 RxTx 库版本 2.1-7r2 32bit。

为了进行一些初始测试/学习,我在一个 Java 控制台应用程序中构建了 RxTx 功能,并按照说明将本机 DLL 和 jar 文件复制到我的各种 32 位 JDK 版本 jdk1.7.0_04 目录中,并使其运行良好。

然后,我创建了一个带有原始 UI 的 JavaFX 应用程序,并开始将 RxTx 代码迁移到这个新项目。这个 JavaFX 应用程序指向我用于控制台应用程序的同一个 32 位 JDK。

JavaFX 应用程序完美地定位了 jar 文件,因为我可以导入 gnu.io.*,然后编写 NetBeans 以及 JavaDocs、自动完成等正确识别的代码。不幸的是,它在执行时返回以下错误,看起来很可疑未找到本机 DLL:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.javafx.main.Main.launchApp(Main.java:486)
    at com.javafx.main.Main.main(Main.java:638)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NoClassDefFoundError: gnu/io/CommPortIdentifier
    at testfxscreens.TestFXScreens.setupSerialPort(TestFXScreens.java:186)
    at testfxscreens.TestFXScreens.start(TestFXScreens.java:61)
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$3.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$2$1.run(Unknown Source)
    ... 1 more
Caused by: java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 9 more

我查看了 RxTx 主页并找到了上述错误的示例解决方案,但它只是提到您的 JDK 中可能没有正确的 DLL 和 JAR 文件。

这真的很奇怪,因为我能够使用相同的 JDK 目录获得控制台应用程序,并且运行良好。我希望我在做一些明显错误的事情,但我并没有摆弄项目设置让我觉得我搞砸了。

是否有任何 JavaFX 2.0 特定的项目设置可以使 RxTx 工作?

任何关于在哪里寻找这个问题的指示,非常感谢!!!

4

1 回答 1

2

Andre,我正在将一个使用 RXTX 库工作正常的 java Swing 应用程序移植到一个新的 JavaFX 应用程序,没有编译问题,但在运行时出现相同的错误。解决方案:在您的 HD 中找到库(在我的情况下为 /system/library/java/Extensions/RXTXComm.jar),打开项目属性面板,转到库,选择按钮选项 Compile 并单击 Add Jar/Folder,添加RXTXComm.jar 到列表中。

于 2012-12-06T01:30:52.883 回答