我已按照说明在http://www.jcontrol.org/download/readme_rxtx_en.html的Windows上设置rxtx。
我所做的完全是将rxtxSerial.dll复制到“C:\ Program Files \ Java \ jdk1.6.0_07 \ jre \ bin” 并将RXTXcomm.jar复制到“C:\ Program Files \ Java \ jdk1.6.0_07 \ jre \ lib \ ext” (我的JAVA_HOME变量设置为C:\ Program Files \ Java \ jdk1.6.0_07 \ jre)
我还将RXTXcomm.jar添加到我的eclipse项目中。
但是当我运行它时,它仍然会说“NoSuchPortException”
Devel Library ========================================= Native lib Version = RXTX-2.0-7pre1 Java lib Version = RXTX-2.0-7pre1 java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver gnu.io.NoSuchPortException at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:218) at TwoWaySerialComm.connect(TwoWaySerialComm.java:20) at TwoWaySerialComm.main(TwoWaySerialComm.java:107)
在我的java文件中,我告诉它:
try { (new TwoWaySerialComm()).connect("COM4"); }
我也尝试过Java Comm API。两者都无法识别我的串口,但我确信我正确地遵循了指令。那里有文件。
有人知道它可能是什么吗?
答案 0 :(得分:1)
尝试将rxtxSerial.dll
放入
C:\Program Files\Java\jdk1.6.0_07\jre\lib\bin
^^^
答案 1 :(得分:1)
识别系统找到的所有可能端口。
答案 2 :(得分:1)
我对RXTX不太熟悉,但这是正常的吗?
java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver
否则问题可能不是端口本身问题,而是类本身的问题? 只是一个猜测。
答案 3 :(得分:1)
您还可以尝试专门为Windows实施的替代解决方案。应该有足够的可用,其中一个可以从http://www.caerustech.com/JCommWin32.php
获得舒尔茨
答案 4 :(得分:0)
可能是您的系统没有定义COM4或者无法访问它。很难猜出可能出现什么问题,因为你还没有发布端口初始化代码 - 你发布的内容看起来像包装代码。
这是我使用javax.comm API的工作初始化代码(但是使用来自serialio.com的SerialPort):
// name comes from config and is "COM1", "COM2", ...
SerialPort port=(SerialPort)CommPortIdentifier.getPortIdentifier(name).open("YourPortOwnerIdHere",5000); // owner and ms timeout
port.setSerialPortParams(bau,dtb,stb,par);
port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN|SerialPort.FLOWCONTROL_RTSCTS_OUT);
port.enableReceiveTimeout(1000);
希望这能指出你正确的方向。
答案 5 :(得分:0)
我同意你的问题看起来像是ClassCastException而不是另一个。
对于Windows,我在http://www.engidea.com/blog/informatica/winjcom/winjcom.html使用“Windows Java Serial Com Port Driver”,我设置起来要容易得多。
在任何一种情况下,您都希望DLL位于BIN目录中,而不是建议的LIB \ BIN。至少那是什么对我有用。我正在使用NetBeans,我还发现将jar和dll放入JDK中的各种bin和lib \ ext文件夹会很有帮助。
请注意,如果您的计算机上有多个版本的JRE,则可能没有使用您认为正在使用的版本。另外,作为一个实际问题,我发现将jar和dll都复制到各种bin和lib \ ext文件夹中会更有帮助。使其成为粘贴,粘贴和粘贴操作。
对于Windows,我推荐“Windows Java Serial Com Port Driver”,因为它解决了我的USB串口问题。我已经适应了RXTX,因为它在USB拔下时会崩溃。 winjcom也解决了这个问题。它有非常有用的错误例外。
另外,请确保您的串行驱动程序是最新的。下载更新修复了我的其他错误。 -Stosh
答案 6 :(得分:0)
在关闭serialEvent函数中的serialPort时也遇到了问题。 也许这是一个死锁问题,close方法永远等待释放serialEvent的锁。 开始一个新的线程关闭端口为我工作。
答案 7 :(得分:0)
对于您的问题,我的代码如下:
if (idPuerto == null)
{
formulario = form;
boolean encontrado = false;
listaPuertos = CommPortIdentifier.getPortIdentifiers();
while( listaPuertos.hasMoreElements() && encontrado == false )
{
idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
//System.out.println(idPuerto.getName());
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL )
{
if( idPuerto.getName().equals(RFIDBascApp.ComBasc) )
{
encontrado = true;
logger.AddInfoUser("Puerto serie encontrado");
}
}
}
答案 8 :(得分:0)
你有NoSuchPortException
,所以首先迭代所有可用的端口!
import gnu.io.CommPortIdentifier;
import java.util.Enumeration;
public class ListAvailablePorts {
public void list() {
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
while(ports.hasMoreElements()){
CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
System.out.println(port.getName());
}
}
public static void main(String[] args) {
new ListAvailablePorts().list();
}
}
答案 9 :(得分:-1)
@Pinheiro你可能想看看this