2012-10-02 58 views
1

不確定是否有更好的堆棧溢出。請原諒我這個問題的性質,但是當談到爲我的Java環境設置時,我還是有點綠色。無法在Mac OS上運行rxtx

我想在Mac上使用Java的rxtx jar文件(10.8)。我已在/ Library/Java/Extensions中安裝了RXTXcomm.jar,librxtxSerial.jnilib和隨附的.so文件。我試圖執行示例代碼:http://arduino.cc/playground/Interfacing/Java

但我顯然缺少一些東西,因爲我得到了一堆「找不到符號」的錯誤消息。

這裏有幾個:

SerialTest.java:3:找不到符號 符號:類CommPortIdentifier 位置:包gnu.io 進口gnu.io.CommPortIdentifier; ^ SerialTest.java:4:找不到符號 符號:class SerialPort location:package gnu.io import gnu.io.SerialPort;

在我的機器上安裝的Java中是否缺少更基本的內容?我剛纔安裝了xcode 4.5,所以我想所有的東西都可以運行這個簡單的代碼。

人們問我把庫放在同一個目錄下。封閉是一個ls和我正在運行的javac命令:

$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$ 

難道是我缺少另一個罐子使這項工作?我沒有在RXTXcomm.jar中看到這些類。

+0

聽起來像一個類路徑問題。你如何運行你的代碼? –

+0

通過簡單的'javac SerialTest.java'運行'compile'或命令提示符就可以通過eclipse實現。我相信如果jar在/ Library/Java/Extensions中,我需要做的是正確的?我試過一個-cp「/ Library/Java/Extensions」,我仍然得到了相同的結果。 – WildBill

+0

聽起來像一個類路徑問題。你如何運行你的代碼? 請嘗試此操作: 將所有文件(包括共享庫,jar文件和示例類)複製到同一目錄,然後cd cd到此目錄。然後,從你的shell中,執行一個 javac -classpath RXTXcomm.jar :. SerialTest.java 然後,執行一個 java -Djava.library.path =。 -cp RXTXcomm.jar :. SerialTest –

回答

4

RXTX庫由兩部分組成:第一部分是Java/Jar部分,第二部分是antive庫。

如果Java可執行文件無法處理本機rxtx庫,則會發生錯誤。 因此,您應該檢查本地庫位於何處。 JNI庫應該有文件擴展名.jnilib.dylib。 然後你有兩種可能性:

第一種可能性是本機庫複製到您從啓動Java目錄(使用Eclipse時,這是項目目錄)。

第二種可能性是啓動Java和指定庫所在的路徑本地庫位於:

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

我做了第一種可能性,但我仍然有相同的問題/錯誤。在Eclipse中編譯時如何'啓動java'? – WildBill

+0

@ WildBill Put -Djava ...在Eclipse項目運行配置的虛擬機參數中 – LanguagesNamedAfterCofee

+0

我做到了,它仍然不能正常工作..... :( – WildBill

0

打開項目屬性潘內爾,去圖書館,選擇按鈕選項進行編譯,然後單擊添加Jar/Folder,將RXTXComm.jar添加到列表中。這對我有用。 因爲你放在正確的地方,所以編譯器會看到這個庫,並且正如Netbeans在項目屬性pannel中所說:「編譯時庫被傳播到所有庫類別」,我們期望在運行時具有相同的可見性但不會發生。

1

如果在上述提示之後它仍然不起作用,那麼您可能擁有32位的RXTX庫。在可以運行32位應用程序的Mac上,您可以強制客戶端Java VM以32位模式工作(與某些Java專家所說的相反)。我通過簡單地使用-d32選項來調用java來擺脫UnsatisfiedLinkError的方式(注意小寫字母,因爲它不是Java系統屬性)。

我的舊程序與舊的基於RS-232的Atmel處理器程序員進行通信時,啓動得很好,在64位環境下工作良好。但是,請記住,對於較新的Mac電腦和64位獨有環境,該選項可能無法使用 - 這是我仍然在Core 2 Duo上保留「雙重」Mac OS X Snow Leopard的主要原因(從Core Duo升級爲戴爾筆記本移植處理器)Mac Mini。

+0

您應該考慮將文本格式設置爲使它更易於閱讀。 –