java RXTX无法在windows 7 64位下列出或查找端口
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12181926/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
RXTX cannot list or find ports under windows 7 64 bits
提问by darkhelmet
Good morning,
早上好,
I'm having issues using/or installing rxtx on windows 7 64 bits. I worked with it previously on a x86 win XP system and had no issues. Since reinstalling to this new system for some reason rxtx is unable to locate any ports whatsoever. I've tried the rxtx install, Cloud Hopper's 64 bit native library and deleting all rxtx files and starting from scratch. RXTXcomm.jar is found and I can browse the packages in NetBeans but the implementation seems to be broken or not found.
我在 Windows 7 64 位上使用/或安装 rxtx 时遇到问题。我以前在 x86 win XP 系统上使用过它,没有任何问题。由于出于某种原因重新安装到这个新系统,因此 rxtx 无法定位任何端口。我已经尝试过 rxtx 安装、Cloud Hopper 的 64 位本机库并删除所有 rxtx 文件并从头开始。找到了 RXTXcomm.jar,我可以浏览 NetBeans 中的包,但实现似乎已损坏或未找到。
This line fails when executing, every time :
每次执行时,此行都会失败:
comPort = "COM1";
portId = CommPortIdentifier.getPortIdentifier(comPort);
and throws a NoSuchPortException.
并抛出一个 NoSuchPortException。
Listing the serial ports using this produces nothing.
使用它列出串行端口不会产生任何结果。
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
String portArray[] = null;
while (ports.hasMoreElements()) {
CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
System.out.println(port.getName());
}
I've checked the serial ports are available so at this point I'm wondering if the native libraries are simply broken for windows 7 64 bits.
我已经检查了串行端口是否可用,所以此时我想知道 Windows 7 64 位的本机库是否被简单地破坏了。
Has anyone successfully used RXTX 2.2pre2 under windows 7 64 bits?
有没有人在windows 7 64位下成功使用过RXTX 2.2pre2?
Offending code section in constructor :
构造函数中的违规代码部分:
public SerialControl(String name, String comPort, int baudrate, int databits, String parity, double stopbits) throws Exception {
int stop = 0;
int data = 0;
int par = 0;
this.name=name;
// Sanity checks and interpretation
if (baudrate > 115200 || baudrate < 300) {
System.err.println(name+": constructor(): Invalid baudrate "+baudrate);
throw new Exception("Invalid baudrate, " + baudrate);
}
if (databits >= 5 && databits <= 8) {
switch (databits) {
case 5:
data = SerialPort.DATABITS_5;
break;
case 6:
data = SerialPort.DATABITS_6;
break;
case 7:
data = SerialPort.DATABITS_7;
break;
case 8:
data = SerialPort.DATABITS_8;
break;
default:
System.err.println(name+": constructor(): Invalid data bits, switched " + databits);
throw new Exception("Invalid data bits, switched " + databits);
}
} else {
throw new Exception("Invalid data bits=" + databits);
}
if (stopbits >= 1.0 && stopbits <= 2.0) {
if (stopbits == 1.0) {
stop = SerialPort.STOPBITS_1;
} else if (stopbits == 1.5) {
stop = SerialPort.STOPBITS_1_5;
} else if (stopbits == 2.0) {
stop = SerialPort.STOPBITS_2;
} else {
System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits);
throw new Exception("Invalid stop bits, switched " + stopbits);
}
} else {
System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits);
throw new Exception("Invalid stop bits " + stopbits);
}
switch (parity) {
case "S":
par = SerialPort.PARITY_SPACE;
break;
case "E":
par = SerialPort.PARITY_EVEN;
break;
case "M":
par = SerialPort.PARITY_MARK;
break;
case "O":
par = SerialPort.PARITY_ODD;
break;
case "N":
par = SerialPort.PARITY_NONE;
break;
default:
System.err.println(name+": constructor(): Invalid parity, switched " + parity);
throw new Exception("Invalid parity, switched " + parity);
}
// Inits
// Try to find the port specified
try {
portId = CommPortIdentifier.getPortIdentifier(comPort);
} catch (Exception e) {
System.err.println(name+": constructor(): No such port \"" + comPort+"\"");
e.printStackTrace();
throw e;
}
// Open the port
try {
serialPort = (SerialPort) portId.open("User Port", 2000);
} catch (PortInUseException e) {
System.err.println(name+": constructor(): Could not open port " + comPort);
throw e;
}
// Grab the input stream
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.err.println(name+": constructor(): Could not get input stream for " + comPort);
throw e;
}
// Set the serial port parameters, no flow control
try {
serialPort.setSerialPortParams(baudrate, data, stop, par);
serialPort.setDTR(false);
serialPort.setRTS(false);
} catch (UnsupportedCommOperationException e) {
System.err.println(name+": constructor(): Error initializing " + comPort);
throw e;
}
}
回答by Maffo
I got the same problem. I use Eclipse as IDE for programming and i found this alternative configuration in the official wiki:
我遇到了同样的问题。我使用 Eclipse 作为 IDE 进行编程,我在官方 wiki 中找到了这个替代配置:
- Copy RXTXcomm.jar to the lib directory of your project
- Navigate your package explorer to the lib folder, right click on RXTXcomm.jar | Build Path | Add to built path
- Copy rxtxSerial.dll and rxtxParallel.dll files to the root directory of your project
- Under Run | Run configurations | Classpath tab | User entries | Advanced | Add folder, choose the root folder of your project
- This should be enough just to run it under Eclipse, when deploying a runnable jar, just make sure the dlls are on the same folder as the jar (JVM assumes it for classpath)
- 将 RXTXcomm.jar 复制到你项目的 lib 目录下
- 将您的包浏览器导航到 lib 文件夹,右键单击 RXTXcomm.jar | 构建路径 | 添加到构建路径
- 将 rxtxSerial.dll 和 rxtxParallel.dll 文件复制到项目的根目录
- 正在运行 | 运行配置 | 类路径选项卡 | 用户条目 | 高级 | 添加文件夹,选择你项目的根文件夹
- 这应该足以在 Eclipse 下运行它,在部署可运行的 jar 时,只需确保 dll 与 jar 位于同一文件夹中(JVM 假定它用于类路径)
(It's my first answer, i don't know if i'm allowed to post an external link, but the five step come's from http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipse)
(这是我的第一个答案,我不知道我是否可以发布外部链接,但五步来自http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipse)
Hope it help !
希望有帮助!
回答by GrahamA
It appers to work for me using Windows 7 and 64-bit versions of Java and RXTX (cloudhopperversion)
它适用于我使用 Windows 7 和 64 位版本的 Java 和 RXTX(cloudhopper版本)
Are you sure you have a COM1?
你确定你有 COM1 吗?