java – RXTX无法在Windows 7 64位下列出或查找端口

前端之家收集整理的这篇文章主要介绍了java – RXTX无法在Windows 7 64位下列出或查找端口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
早上好,

我在Windows 7 64位上使用/或安装rxtx时遇到问题.我以前在x86 win XP系统上使用它并没有问题.由于某些原因重新安装到这个新系统,rxtx无法找到任何端口.我已经尝试了rxtx安装,Cloud Hopper的64位本机库并删除所有rxtx文件并从头开始.找到RXTXcomm.jar,我可以浏览NetBeans中的软件包,但实现似乎已被破坏或找不到.

每次执行时,此行都会失败:

  1. comPort = "COM1";
  2. portId = CommPortIdentifier.getPortIdentifier(comPort);

并抛出NoSuchPortException.

使用它列出串行端口不会产生任何结果.

  1. Enumeration ports = CommPortIdentifier.getPortIdentifiers();
  2. String portArray[] = null;
  3. while (ports.hasMoreElements()) {
  4. CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
  5. System.out.println(port.getName());
  6. }

我已经检查过串口是否可用所以此时我想知道本机库是否只是针对Windows 7 64位而被破坏了.

有没有人在Windows 7 64位下成功使用RXTX 2.2pre2?

构造函数中的违规代码部分:

  1. public SerialControl(String name,String comPort,int baudrate,int databits,String parity,double stopbits) throws Exception {
  2. int stop = 0;
  3. int data = 0;
  4. int par = 0;
  5.  
  6. this.name=name;
  7.  
  8. // Sanity checks and interpretation
  9. if (baudrate > 115200 || baudrate < 300) {
  10. System.err.println(name+": constructor(): Invalid baudrate "+baudrate);
  11. throw new Exception("Invalid baudrate," + baudrate);
  12. }
  13.  
  14. if (databits >= 5 && databits <= 8) {
  15. switch (databits) {
  16. case 5:
  17. data = SerialPort.DATABITS_5;
  18. break;
  19. case 6:
  20. data = SerialPort.DATABITS_6;
  21. break;
  22. case 7:
  23. data = SerialPort.DATABITS_7;
  24. break;
  25. case 8:
  26. data = SerialPort.DATABITS_8;
  27. break;
  28. default:
  29. System.err.println(name+": constructor(): Invalid data bits,switched " + databits);
  30. throw new Exception("Invalid data bits,switched " + databits);
  31. }
  32. } else {
  33. throw new Exception("Invalid data bits=" + databits);
  34. }
  35.  
  36. if (stopbits >= 1.0 && stopbits <= 2.0) {
  37.  
  38. if (stopbits == 1.0) {
  39. stop = SerialPort.STOPBITS_1;
  40. } else if (stopbits == 1.5) {
  41. stop = SerialPort.STOPBITS_1_5;
  42. } else if (stopbits == 2.0) {
  43. stop = SerialPort.STOPBITS_2;
  44. } else {
  45. System.err.println(name+": constructor(): Invalid stop bits,switched " + stopbits);
  46. throw new Exception("Invalid stop bits,switched " + stopbits);
  47. }
  48. } else {
  49. System.err.println(name+": constructor(): Invalid stop bits,switched " + stopbits);
  50. throw new Exception("Invalid stop bits " + stopbits);
  51. }
  52.  
  53. switch (parity) {
  54. case "S":
  55. par = SerialPort.PARITY_SPACE;
  56. break;
  57. case "E":
  58. par = SerialPort.PARITY_EVEN;
  59. break;
  60. case "M":
  61. par = SerialPort.PARITY_MARK;
  62. break;
  63. case "O":
  64. par = SerialPort.PARITY_ODD;
  65. break;
  66. case "N":
  67. par = SerialPort.PARITY_NONE;
  68. break;
  69. default:
  70. System.err.println(name+": constructor(): Invalid parity,switched " + parity);
  71. throw new Exception("Invalid parity,switched " + parity);
  72. }
  73.  
  74. // Inits
  75. // Try to find the port specified
  76. try {
  77. portId = CommPortIdentifier.getPortIdentifier(comPort);
  78. } catch (Exception e) {
  79. System.err.println(name+": constructor(): No such port \"" + comPort+"\"");
  80. e.printStackTrace();
  81. throw e;
  82. }
  83.  
  84. // Open the port
  85. try {
  86. serialPort = (SerialPort) portId.open("User Port",2000);
  87. } catch (PortInUseException e) {
  88. System.err.println(name+": constructor(): Could not open port " + comPort);
  89. throw e;
  90. }
  91.  
  92. // Grab the input stream
  93. try {
  94. inputStream = serialPort.getInputStream();
  95. } catch (IOException e) {
  96. System.err.println(name+": constructor(): Could not get input stream for " + comPort);
  97. throw e;
  98. }
  99.  
  100. // Set the serial port parameters,no flow control
  101. try {
  102. serialPort.setSerialPortParams(baudrate,data,stop,par);
  103. serialPort.setDTR(false);
  104. serialPort.setRTS(false);
  105. } catch (UnsupportedCommOperationException e) {
  106. System.err.println(name+": constructor(): Error initializing " + comPort);
  107. throw e;
  108. }
  109. }

解决方法

我遇到了同样的问题.我使用Eclipse作为IDE进行编程,我在官方维基中找到了这个替代配置:

>将RXTXcomm.jar复制到项目的lib目录中
>将package explorer导航到lib文件夹,右键单击RXTXcomm.jar |构建路径|添加到构建的路径
>将rxtxSerial.dll和rxtxParallel.dll文件复制到项目的根目录
>在运行|运行配置| Classpath选项卡|用户条目|高级|添加文件夹,选择项目的根文件
>这应该足以在Eclipse下运行它,在部署可运行的jar时,只需确保dll与jar相同的文件夹(JVM假定它为类路径)

(这是我的第一个答案,我不知道我是否可以发布外部链接,但是从http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipse开始的五步)

希望它有所帮助!

猜你在找的Java相关文章