1

我正在尝试在 Mac(OSX 10.8)上为 Java 使用 rxtx JAR 文件。我已经安装RXTXcomm.jar了 ,librxtxSerial.jnilib和随附的.so文件/Library/Java/Extensions。我正在尝试在以下位置执行示例代码: http ://arduino.cc/playground/Interfacing/Java

但是当我收到一堆cannot find symbol错误消息时,我显然遗漏了一些东西。

这里有一对:

SerialTest.java:3: cannot find symbol
symbol  : class CommPortIdentifier
location: package gnu.io
import gnu.io.CommPortIdentifier;
             ^
SerialTest.java:4: cannot find symbol
symbol  : class SerialPort
location: package gnu.io
import gnu.io.SerialPort;

在我的机器上安装的 Java 中是否缺少一些更基本的东西?我刚刚安装了 Xcode 4.5,所以我认为一切都可以运行这个简单的代码。

人们要求我将库放在同一目录中。随附的是一个lsjavac我正在运行的命令:

$javac -classpath RXTXcomm.jar:. SerialTest.java 

SerialTest.java:3: cannot find symbol
symbol  : class CommPortIdentifier
location: package gnu.io
import gnu.io.CommPortIdentifier;
             ^
SerialTest.java:4: cannot find symbol
symbol  : class SerialPort
location: package gnu.io
import gnu.io.SerialPort;
             ^
SerialTest.java:5: cannot find symbol
symbol  : class SerialPortEvent
location: package gnu.io
import gnu.io.SerialPortEvent; 
             ^
SerialTest.java:6: cannot find symbol
symbol  : class SerialPortEventListener
location: package gnu.io
import gnu.io.SerialPortEventListener; 
             ^
SerialTest.java:9: cannot find symbol
symbol: class SerialPortEventListener
public class SerialTest implements SerialPortEventListener {
                                   ^
SerialTest.java:10: cannot find symbol
symbol  : class SerialPort
location: class SerialTest
    SerialPort serialPort;
    ^
SerialTest.java:83: cannot find symbol
symbol  : class SerialPortEvent
location: class SerialTest
    public synchronized void serialEvent(SerialPortEvent oEvent) {
                                         ^
SerialTest.java:27: cannot find symbol
symbol  : class CommPortIdentifier
location: class SerialTest
        CommPortIdentifier portId = null;
        ^
SerialTest.java:28: cannot find symbol
symbol  : variable CommPortIdentifier
location: class SerialTest
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
                               ^
SerialTest.java:32: cannot find symbol
symbol  : class CommPortIdentifier
location: class SerialTest
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            ^
SerialTest.java:32: cannot find symbol
symbol  : class CommPortIdentifier
location: class SerialTest
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
                                             ^
SerialTest.java:48: cannot find symbol
symbol  : class SerialPort
location: class SerialTest
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                          ^
SerialTest.java:53: cannot find symbol
symbol  : variable SerialPort
location: class SerialTest
                    SerialPort.DATABITS_8,
                    ^
SerialTest.java:54: cannot find symbol
symbol  : variable SerialPort
location: class SerialTest
                    SerialPort.STOPBITS_1,
                    ^
SerialTest.java:55: cannot find symbol
symbol  : variable SerialPort
location: class SerialTest
                    SerialPort.PARITY_NONE);
                    ^
SerialTest.java:84: cannot find symbol
symbol  : variable SerialPortEvent
location: class SerialTest
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
                                     ^
16 errors
MacBook-Pro:src user$ ls
RXTXcomm.jar        comm.jar        librxtxSerial.jnilib
SerialTest.java     librxtxParallel.so  librxtxSerial.so
MacBook-Pro:src user$ 

是我错过了另一个 JAR 来完成这项工作吗?我在RXTXcomm.jar.

4

3 回答 3

5

RXTX 库由两部分组成:首先是 Java/Jar 部分,其次是本机库。

如果 Java 可执行文件找不到本机rxtx库,则会发生错误。因此,您应该检查此本机库的位置。JNI 库应具有文件扩展名.jnilib.dylib. 那么你有两种可能:

  • 第一种可能性是将本机库复制到启动 Java 的目录中(使用 Eclipse 时,这是项目目录)。

  • 第二种可能是启动Java并指定原生库所在的库路径:

java -Djava.library.path=".:/Users/bill/rxtx/jni" MyClass 
于 2012-10-02T11:35:16.473 回答
1

如果在上面的这些提示之后它仍然不起作用,则可能你有 32 位 RXTX 库。在可以运行 32 位应用程序的 Mac 上,您可以强制客户端 Java VM 在 32 位模式下工作(与某些 Java 专家所说的相反)。UnsatisfiedLinkError我通过简单地使用选项调用java来管理这种方式来摆脱-d32它(注意小写,因为它不是Java系统属性)。

我与用于 Atmel 处理器的旧 RS-232 程序员进行通信的旧程序启动得很好,并且在 64 位环境中运行良好。但是,请记住,对于较新的 Mac 和 64 位独占环境,该选项可能不可用 - 这是我仍然在 Core 2 Duo 上保留“双”Mac OS X Snow Leopard 的主要原因(从 Core Duo 升级戴尔笔记本移植处理器)Mac Mini。

于 2012-12-09T18:12:26.887 回答
0

打开项目属性面板,转到库,选择按钮选项编译并单击添加 Jar/Folder,将 RXTXComm.jar 添加到列表中。那对我有用。编译器会看到该库,因为您放置在正确的位置,然后正如 Netbeans 在项目属性面板中所说的“编译时库传播到所有库类别”,我们期望在运行时具有相同的可见性,但不会发生。

于 2012-12-06T01:46:24.650 回答