我正在构建需要通过串行端口与读卡器交互的桌面 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 工作?
任何关于在哪里寻找这个问题的指示,非常感谢!!!