2012-08-29 35 views
7

Chào buổi sáng,RXTX không thể liệt kê hoặc tìm các cổng trong các cửa sổ 7 64 bit

Tôi gặp sự cố khi sử dụng/hoặc cài đặt rxtx trên windows 7 64 bit. Tôi đã làm việc với nó trước đây trên một hệ thống XP x86 chiến thắng và không có vấn đề gì. Kể từ khi cài đặt lại hệ thống mới này vì lý do nào đó, rxtx không thể định vị bất kỳ cổng nào. Tôi đã thử cài đặt rxtx, thư viện gốc 64 bit của Cloud Hopper và xóa tất cả các tệp rxtx và bắt đầu từ đầu. Đã tìm thấy RXTXcomm.jar và tôi có thể duyệt các gói trong NetBeans nhưng việc triển khai có vẻ bị hỏng hoặc không tìm thấy.

Dòng này thất bại khi thực hiện, mỗi lần:

comPort = "COM1"; 
portId = CommPortIdentifier.getPortIdentifier(comPort); 

và ném một NoSuchPortException.

Liệt kê các cổng nối tiếp bằng cách sử dụng tính năng này không tạo ra gì.

Enumeration ports = CommPortIdentifier.getPortIdentifiers(); 
String portArray[] = null; 
while (ports.hasMoreElements()) { 
    CommPortIdentifier port = (CommPortIdentifier) ports.nextElement(); 
    System.out.println(port.getName()); 
} 

Tôi đã kiểm tra các cổng nối tiếp sẵn có tại thời điểm này, tôi tự hỏi liệu các thư viện gốc có bị hỏng cho windows 7 64 bit không.

Có ai đã sử dụng thành công RXTX 2.2pre2 trong cửa sổ 7 64 bit không?

phần mã vi phạm trong xây dựng:

public SerialControl(String name, String comPort, int baudrate, int databits, String  parity, double stopbits) throws Exception { 
    int stop = 0; 
    int data = 0; 
    int par = 0; 

    this.name=name; 

    // Sanity checks and interpretation 
    if (baudrate > 115200 || baudrate < 300) { 
     System.err.println(name+": constructor(): Invalid baudrate "+baudrate); 
     throw new Exception("Invalid baudrate, " + baudrate); 
    } 

    if (databits >= 5 && databits <= 8) { 
     switch (databits) { 
      case 5: 
       data = SerialPort.DATABITS_5; 
       break; 
      case 6: 
       data = SerialPort.DATABITS_6; 
       break; 
      case 7: 
       data = SerialPort.DATABITS_7; 
       break; 
      case 8: 
       data = SerialPort.DATABITS_8; 
       break; 
      default: 
       System.err.println(name+": constructor(): Invalid data bits, switched " + databits); 
       throw new Exception("Invalid data bits, switched " + databits); 
     } 
    } else { 
     throw new Exception("Invalid data bits=" + databits); 
    } 

    if (stopbits >= 1.0 && stopbits <= 2.0) { 

     if (stopbits == 1.0) { 
      stop = SerialPort.STOPBITS_1; 
     } else if (stopbits == 1.5) { 
      stop = SerialPort.STOPBITS_1_5; 
     } else if (stopbits == 2.0) { 
      stop = SerialPort.STOPBITS_2; 
     } else { 
      System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits); 
      throw new Exception("Invalid stop bits, switched " + stopbits); 
     } 
    } else { 
     System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits); 
     throw new Exception("Invalid stop bits " + stopbits); 
    } 

    switch (parity) { 
     case "S": 
      par = SerialPort.PARITY_SPACE; 
      break; 
     case "E": 
      par = SerialPort.PARITY_EVEN; 
      break; 
     case "M": 
      par = SerialPort.PARITY_MARK; 
      break; 
     case "O": 
      par = SerialPort.PARITY_ODD; 
      break; 
     case "N": 
      par = SerialPort.PARITY_NONE; 
      break; 
     default: 
      System.err.println(name+": constructor(): Invalid parity, switched " + parity); 
      throw new Exception("Invalid parity, switched " + parity); 
    } 

    // Inits 
    // Try to find the port specified 
    try { 
     portId = CommPortIdentifier.getPortIdentifier(comPort); 
    } catch (Exception e) { 
     System.err.println(name+": constructor(): No such port \"" + comPort+"\""); 
     e.printStackTrace(); 
     throw e; 
    } 

    // Open the port 
    try { 
     serialPort = (SerialPort) portId.open("User Port", 2000); 
    } catch (PortInUseException e) { 
     System.err.println(name+": constructor(): Could not open port " + comPort); 
     throw e; 
    } 

    // Grab the input stream 
    try { 
     inputStream = serialPort.getInputStream(); 
    } catch (IOException e) { 
     System.err.println(name+": constructor(): Could not get input stream for " + comPort); 
     throw e; 
    } 

    // Set the serial port parameters, no flow control 
    try { 
     serialPort.setSerialPortParams(baudrate, data, stop, par); 
     serialPort.setDTR(false); 
     serialPort.setRTS(false); 
    } catch (UnsupportedCommOperationException e) { 
     System.err.println(name+": constructor(): Error initializing " + comPort); 
     throw e; 
    } 
} 
+0

cả hai công cụ 'SerialControl' và CommPortIdentifier # getPortIdentifiers()' hoạt động từ Eclipse và dòng lệnh – GrahamA

+0

Một chút followup cho những người có thể gặp phải điều này, dự án của tôi đã được nhập từ môi trường Windows XP, xây dựng lại chúng trong Windows 7 sửa chữa bất cứ vấn đề gì. – darkhelmet

Trả lời

2

Nó appers làm việc cho tôi sử dụng Windows 7 và các phiên bản 64-bit của Java và RXTX (cloudhopper phiên bản)

enter image description here

Bạn chắc chắn bạn có một COM1?

+0

Có tôi sử dụng nó mọi lúc với Putty.Mã của bạn liệt kê các cổng của tôi một cách chính xác khi tôi chạy nó trong một ứng dụng riêng biệt, nhưng khi chạy từ lớp serial của tôi các cổng không được tìm thấy ... bí ẩn dày đặc nhưng nó có vẻ giống như một vấn đề thư viện. – darkhelmet

+0

@darkhelmet nếu bạn muốn đăng lớp học tiếp theo của bạn, tôi sẽ thử chạy nó – GrahamA

+0

lớp có một vài phụ thuộc vào các lớp khác, tôi không thể đăng tất cả nhưng đây là phần liên quan trong constructor nơi nó xảy ra; đó là điều đầu tiên tôi khởi tạo cổng nối tiếp – darkhelmet

9

Tôi gặp vấn đề tương tự. Tôi sử dụng Eclipse là IDE cho lập trình và tôi tìm thấy cấu hình thay thế này trong wiki chính thức:

  1. Sao chép RXTXcomm.jar vào thư mục lib của dự án của bạn
  2. hướng gói thám hiểm của bạn vào thư mục lib, nhấp chuột phải vào RXTXcomm.jar | Xây dựng đường dẫn | Thêm vào đường dẫn được tạo
  3. Sao chép các tệp rxtxSerial.dll và rxtxParallel.dll vào thư mục gốc của dự án của bạn
  4. Đang chạy | Chạy cấu hình | Tab Classpath | Mục nhập của người dùng | Nâng cao | Thêm thư mục, chọn thư mục gốc của dự án của bạn
  5. Điều này chỉ đủ để chạy nó dưới Eclipse, khi triển khai một jar có thể chạy được, chỉ cần đảm bảo các dll nằm trên cùng thư mục với jar (JVM giả định nó cho classpath)

(đó là câu trả lời đầu tiên của tôi, tôi không biết nếu tôi được phép gửi một liên kết bên ngoài, nhưng năm bước đi từ http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipse)

Hy vọng nó sẽ giúp!

+0

Các liên kết ngoài tới tham chiếu được khuyến khích! Chỉ cần cẩn thận về tự quảng bá (xem [FAQ] (http://stackoverflow.com/faq#promotion)) ... nhưng điều đó dường như không phải là vấn đề trong trường hợp này. :) – hopper

+0

Cảm ơn! Tôi hơi muộn trong việc trả lời nhưng tôi đã có thể sử dụng điều này trong khi tôi xây dựng lại các dự án NetBeans của mình. – darkhelmet

Các vấn đề liên quan