这个代码片段应该做什么:检测所有串行端口并将端口的名称打印到屏幕上。
问题:在 eclipse 中运行时,程序可以很好地检测串行端口;但是,在导出可运行的 jar 并运行 jar 后,jar 检测到 NO 端口。我非常怀疑这与实际代码本身有任何关系(因为它在 eclipse 中运行良好),但我已将代码片段放入以防万一我错过了某些内容。
我尝试过/已经做过/看过什么:
我考虑它可能只是我的电脑,所以我已经尝试在另一台计算机上运行 jar,但收到了相同的结果。我还确保所有内容都在正确的位置(jar 文件、.dll 文件和属性文件)。我进行了四次检查,以确保我的构建路径包含正确的文件。
我已经探索过:http://www.oracle.com/technetwork/java/index-139971.html
我花了最后一个小时搜索有关与我类似的问题的网站和 SO 问题,但我没有找到解决方案。
这是我的代码基于的网站:http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java#JavaComm_API
问题:为什么会发生这种情况/我该如何解决这个问题?
附加信息:我正在使用 javax.comm
,带有 32 位版本的 jdk 1.8.0_31,运行 Windows 8。jar 文件运行良好(它有一个单独的组件可以完美运行)。编译期间没有错误(或警告),也没有引发异常。我正在使用java -jar program.jar
运行罐子.我知道我的电脑有一个串行端口,因为当我运行程序时,日食显示COM1。(该程序还能够检测并行端口,但只能在日食中检测)
boolean portsDetected = false;
Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
while (portIdentifiers.hasMoreElements()) {
CommPortIdentifier pid = (CommPortIdentifier)portIdentifiers.nextElement();
if ((pid.getPortType() == CommPortIdentifier.PORT_SERIAL)) {
System.out.println(pid.getName());
portsDetected = true;
}
}
if (!portsDetected) {
System.out.println("No serial ports detected");
return 0;
}
如果还有什么需要知道或想看的,请问,你们将收到!
1. Copy win32.dll file to c:ProgramFilesjavajdkbin
2. Copy comm.jar file to c:ProgramFilesjavajdklib
3. Copy javax.comm properties file to c:ProgramFilesjavajdklib
4. Copy
win32com.dll to jre/bin
comm.jar to jre/lib/ext
java.comm.properties to jre/lib
Note:Add all files in step 4 to both JRE. Jre Dir and Jre in JDK folder
这解决了我的问题