无法在Mac OS上运行rxtx

时间:2012-10-02 11:13:59

标签: java rxtx

我正在尝试在Mac上使用rxtx JAR文件for Java(OSX 10.8)。我在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

中没有看到这些类

3 个答案:

答案 0 :(得分:5)

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

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

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

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

java -Djava.library.path=".:/Users/bill/rxtx/jni" MyClass 

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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