gpt4 book ai didi

Java - 部署 RXTX

转载 作者:行者123 更新时间:2023-12-01 14:23:43 28 4
gpt4 key购买 nike

我使用的是 Windows 7 64 位。我编写了一个小应用程序,它使用 RXTX 通过串行端口进行通信。我在 Windows 64 位上使用了 rxtxSerial.dll,它在 Eclispe 和 NetBeans 上都运行得很好。

在项目的根目录中,我放置了 RXTXComm.jarrxtxSerial.dll。

当我想要部署应用程序时出现问题。我使用了 Eclipse 上的导出功能,或者从 NetBeans 访问了 bin/文件夹。我再次将 RXTXComm.jarrxtxSerial.dll 放置在文件夹的根目录中,但是当我执行 Application.jar 时,RXTX 没有看起来在工作。扫描似乎卡住了,而其持续时间不应超过一秒。

[抱歉,我“需要至少 10 个声誉才能发布图片。”]

我尝试了在互联网上找到的所有建议:

  • 在 JRE 文件夹中安装 dll 和 RXTXComm.jar
  • 将 dll 放在 Windows32 文件夹中
  • 尝试了从 Eclipse 导出的所有不同导出选项

我一定错过了什么。有人已经成功为 Windows 32/64 位和 MAC 部署 RXTX 了吗?您能描述一下您做了什么以及需要做什么吗?

请在下面找到扫描端口时执行的代码段:

private void scanButtonAction()
{
if(scanState == ST_FREE)
{
scanState = ST_SCANNING;
redrawComponents();
scan = new Thread(new ScanPorts());
scan.start();
}
}

// Thread run to scan the ports
private class ScanPorts implements Runnable {
public void run()
{
try
{
UARTConnection connection = new UARTConnection();

// listPort() is a long blocking call
String[][] list = connection.listPorts();

// Display the ports in the ComboBox
comboBoxModel.removeAllElements();

if(list.length == 0) comboBoxModel.addElement( new Item(-1, "No port scanned", "" ) );
else
{
for(int i = 0; i < list.length; i++)
{
// Id, Description (user's display), PortName (for serial connection)
comboBoxModel.addElement( new Item(i, list[i][1], list[i][0]) );
}

// To select the first item of the list. Necessary with custom Rendered
portNumberBox.setSelectedIndex(0);
}

scanState = ST_FREE;
redrawComponents();

// The connect button is enabled only after a first scan
connectButton.setEnabled(true);
}
catch(Exception ex)
{
scanState = ST_FREE;
redrawComponents();
}
}
}

public class UARTConnection {

public UARTConnection()
{

}

public String[][] listPorts() throws Exception
{
Enumeration<CommPortIdentifier> portEnum = CommPortIdentifier.getPortIdentifiers();
Enumeration<CommPortIdentifier> tmpPortEnum = portEnum;

ArrayList<String[]> list = new ArrayList<String[]>();

int i = 0;
while ( portEnum.hasMoreElements() )
{
String port[] = new String[2];
CommPortIdentifier portIdentifier = portEnum.nextElement();
System.out.println(portIdentifier.getName() + " - " + getPortTypeName(portIdentifier.getPortType()));

port[0] = portIdentifier.getName();
port[1] = portIdentifier.getName() + " - " + getPortTypeName(portIdentifier.getPortType());

list.add(port);

i++;
}

String listOfPort[][] = new String[list.size()][2];
for(i = 0; i < list.size(); i++)
{
String[] port = list.get(i);
listOfPort[i][0] = port[0];
listOfPort[i][1] = port[1];
}

return listOfPort;
}

private String getPortTypeName ( int portType )
{
switch ( portType )
{
case CommPortIdentifier.PORT_I2C:
return "I2C";
case CommPortIdentifier.PORT_PARALLEL:
return "Parallel";
case CommPortIdentifier.PORT_RAW:
return "Raw";
case CommPortIdentifier.PORT_RS485:
return "RS485";
case CommPortIdentifier.PORT_SERIAL:
return "Serial";
default:
return "unknown type";
}
}
}

感谢您的帮助。

最佳答案

我找到了解决方案,对于那些可能有帮助的人。

从 Eclipse 或 NetBean 运行应用程序时,该应用程序以 64 位运行。因此,我使用了 64 位 rxtxSerial.dll。工作正常。

但我意识到,当在 IDE 外部运行编译后的 .jar 时,Windows 进程列表显示应用程序的 javaw.exe *32。由于某种原因我忽略了,编译的 .jar 是 32 位的。因此,所需的驱动程序适用于 Windows 32 位,而不是 64 位。从现在开始效果很好。

注意:为了能够在我的 MAC 上工作,我必须在 Java 1.6(而不是 1.7)中编译应用程序,当然还要提供 MAC 驱动程序。

关于Java - 部署 RXTX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com