Java - получить идентификатор COM-порта

Я пишу java-программу, и сейчас у меня есть установочный файл, содержащий номер COM-порта. который необходимо изменить, если устройство меняет номер COM-порта.

Это не очень удобно для пользователя. Поэтому я хочу иметь возможность получить список идентификаторов COM-портов и позволить пользователю выбрать правильное устройство по его идентификатору. Я пробовал гуглить, но без особого успеха.

Под идентификатором я подразумеваю, если вы проверите Диспетчер устройств: «Идентификатор COM-порта (COM‹#>)». Проверьте выделенный красным текст на следующем рисунке:

введите здесь описание изображения

Я пробовал следующие библиотеки:

  • javax.comm - CommPortIdentifier,getPortIdentifiers();
  • jssc - SerialPortList.getPortNames();

Но мне не удалось узнать, можно ли получить идентификатор COM-порта, поскольку два вышеуказанных метода просто возвращают номер COM-порта. Кто-нибудь знает способ получить идентификаторы COM-портов?


person Zeliax    schedule 06.06.2016    source источник
comment
В настоящее время я не на ПК, на котором у меня есть код, но, насколько я помню, он только что вернул COM#. Я хочу получить имя элемента, подключенного к этому порту.   -  person Zeliax    schedule 07.06.2016
comment
вы можете попытаться прочитать эту информацию из реестра - но это, конечно, будет работать только в Windows.   -  person TmTron    schedule 10.06.2016
comment
Это довольно странно, JSSC работает как шарм. Не стесняйтесь загружать этот код, github.com/enriquezrene/javafx-arduino Я показываю COM порты и пользователь выбирает его, а затем я использую его для работы, я надеюсь, что это поможет вам   -  person Rene Enriquez    schedule 10.06.2016


Ответы (1)


Я использовал rxtxcomm.jar и rxtxSerial.dll для связи с Arduino. Этот фрагмент должен предоставить вам доступные порты:

@SuppressWarnings("unchecked")
Enumeration<CommPortIdentifier> portEnum = CommPortIdentifier.getPortIdentifiers();

while (portEnum.hasMoreElements()) {
    CommPortIdentifier currPortId = portEnum.nextElement();
    System.out.println(currPortId.getName() + " - " + currPortId.getCurrentOwner());
}

Вот статья с некоторыми дополнительными подробностями: https://blog.henrypoon.com/blog/2010/12/25/installing-rxtx-for-serial-communication-with-java/

person maccaroo    schedule 10.06.2016
comment
Проблема в том, что я не подключаюсь к устройству с помощью кода, а использую дополнительный API для завершения подключения и передачи необходимых данных. - person Zeliax; 20.06.2016