NoSuchPortException с использованием библиотеки Java RXTX в Windows? - PullRequest
1 голос
/ 08 ноября 2008

Я следовал инструкциям по настройке rxtx на windows с http://www.jcontrol.org/download/readme_rxtx_en.html.

Что я сделал, так это скопировал rxtxSerial.dll в «C: \ Program Files \ Java \ jdk1.6.0_07 \ jre \ bin» и скопировал RXTXcomm.jar в «C: \ Program Files \ Java \ jdk1.6.0_07 \ jre \ lib \ ext» (моя переменная JAVA_HOME установлена ​​в C: \ Program Files \ Java \ jdk1.6.0_07 \ jre)

Я также добавил RXTXcomm.jar в свой проект затмения.

Но когда я запускаю его, он все равно говорит "NoSuchPortException"

Devel Library
=========================================
Native lib Version = RXTX-2.0-7pre1
Java lib Version   = RXTX-2.0-7pre1
java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver
gnu.io.NoSuchPortException
    at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:218)
    at TwoWaySerialComm.connect(TwoWaySerialComm.java:20)
    at TwoWaySerialComm.main(TwoWaySerialComm.java:107)

В моем Java-файле я говорю это:

        try
        {
            (new TwoWaySerialComm()).connect("COM4");
        }

и я также попробовал API Java Comm. Оба не могут распознать мой последовательный порт, но я уверен, что правильно следовал инструкции. Там есть файлы.

Кто-нибудь знает, что это может быть?

Ответы [ 10 ]

1 голос
/ 14 апреля 2009

Я не слишком знаком с RXTX, но это нормально?

java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver

Иначе, может, проблема не в самом порте, а в чем-то самих классах? Просто предположение.

1 голос
/ 25 января 2010

Вы также можете попробовать альтернативное решение, специально разработанное для Windows. Там должно быть много доступных, один из них вы можете получить от http://www.caerustech.com/JCommWin32.php

Шульца

1 голос
/ 10 ноября 2008

вы можете использовать CommPortIdentifier.getPortIdentifiers ()

для определения всех возможных портов, которые находит ваша система.

1 голос
/ 08 ноября 2008

Попробуйте положить rxtxSerial.dll в

C:\Program Files\Java\jdk1.6.0_07\jre\lib\bin
                                      ^^^
0 голосов
/ 08 февраля 2011

У вас было NoSuchPortException, поэтому сначала выполните итерацию на всех доступных портах!

import gnu.io.CommPortIdentifier;        
import java.util.Enumeration;  

public class ListAvailablePorts {  

    public void list() {  
        Enumeration ports = CommPortIdentifier.getPortIdentifiers();  

        while(ports.hasMoreElements()){  
            CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
            System.out.println(port.getName());
        }
    }  

    public static void main(String[] args) {  
        new ListAvailablePorts().list();  
    }  
} 
0 голосов
/ 30 декабря 2010

@ Пинейро, вы можете взглянуть на это

0 голосов
/ 29 апреля 2010

На ваш вопрос мой код следующий:

if (idPuerto == null)
{
            formulario = form;
            boolean encontrado = false;


            listaPuertos = CommPortIdentifier.getPortIdentifiers();

            while( listaPuertos.hasMoreElements() && encontrado == false )
            {
              idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
              //System.out.println(idPuerto.getName());

              if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL )
              {
                if( idPuerto.getName().equals(RFIDBascApp.ComBasc) )
                {        
                    encontrado = true;
                    logger.AddInfoUser("Puerto serie encontrado");

                  }
                }
              }
0 голосов
/ 10 сентября 2009

У меня также была проблема при закрытии serialPort в функции serialEvent. Может быть, это проблема взаимоблокировки, когда метод close всегда ждет освобождения блокировки serialEvent Запуск нового потока для закрытия порта работал для меня.

0 голосов
/ 21 апреля 2009

Я согласен, что ваша проблема выглядит как ClassCastException, а не как другая.

Для Windows я использую «Windows Java Serial Com Port Driver» в http://www.engidea.com/blog/informatica/winjcom/winjcom.html, и мне гораздо проще настроить.

В любом случае вам нужна библиотека DLL в каталоге BIN, а не LIB \ BIN, как было предложено. По крайней мере, это то, что работает для меня. Я использую NetBeans, и я также нашел полезным поместить jar и dll в различные папки bin и lib \ ext в JDK.

Обратите внимание, что если на вашем компьютере установлено несколько версий JRE, возможно, вы не используете ту, которую, по вашему мнению, используете. Кроме того, с практической точки зрения я считаю более полезным просто скопировать jar и dll в различные папки bin и lib \ ext. Делает это просто вставить, вставить, операция вставки.

Для Windows я рекомендую «Драйвер последовательного порта Java для Windows», потому что он решил мои проблемы с последовательными портами USB. У меня были проблемы с RXTX, потому что он зависал при отключении USB. Winjcom решил эту проблему и другие. Имеются очень полезные исключения ошибок.

Кроме того, убедитесь, что ваши последовательные драйверы обновлены. Загрузка обновления исправила мою другую ошибку. -Stosh

0 голосов
/ 08 ноября 2008

Возможно, в вашей системе не определен COM4 или он недоступен. Трудно догадаться, что может быть не так, потому что вы не опубликовали свой код инициализации порта - то, что вы опубликовали, выглядит как код оболочки.

Вот мой рабочий код инициализации с использованием API javax.comm (но с использованием SerialPort от serialio.com):

// name comes from config and is "COM1", "COM2", ...
SerialPort port=(SerialPort)CommPortIdentifier.getPortIdentifier(name).open("YourPortOwnerIdHere",5000);      // owner and ms timeout
port.setSerialPortParams(bau,dtb,stb,par);
port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN|SerialPort.FLOWCONTROL_RTSCTS_OUT);
port.enableReceiveTimeout(1000);

Надеюсь, это направит вас в правильном направлении.

...