Получение проблем в RXTX

Поскольку несколько других указали в целом, что это не проблема.

единственный случай это вызовет Вас, проблемы - то, если Вы возвращаетесь посреди оператора использования и дополнительно возвращаетесь в использовании переменной. Но с другой стороны, это также вызвало бы, Вы выходите, даже если Вы не возвратили и просто сохранили ссылку на переменную.

using ( var x = new Something() ) { 
  // not a good idea
  return x;
}

Так же, как плохо

Something y;
using ( var x = new Something() ) {
  y = x;
}
7
задан Cœur 6 August 2018 в 12:40
поделиться

3 ответа

Хорошо, извините, что мне потребовалось так много времени, чтобы вернуться к этому вопросу. Вот как у меня все заработало.

Примечание: этот метод НЕ будет работать для всех, пожалуйста, прочтите ниже, прежде чем копировать / вставлять в свой собственный код

public void connect(CommPortIdentifier portId) throws Failure {
    if (portId == null)
        throw new Failure("No port set");

    try { port = (SerialPort) portId.open(getClass().getName(), 10000); } 
    catch (PortInUseException e) {
        throw new Failure("Port in use by " + e.currentOwner,e); }

    try {
        port.setSerialPortParams(9600, SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
        port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN
                              | SerialPort.FLOWCONTROL_RTSCTS_OUT);
    } catch (UnsupportedCommOperationException e) { throw new Failure(e); }

    port.setRTS(true);

    // More setup
}

Итак, в моем случае проблема заключалась в том, что мое конкретное устройство требует управления потоком RTS. Для других устройств могут потребоваться другие функции (CTS, XON / XOFF), поэтому обратитесь к руководству для этого устройства. По умолчанию RXTX отключает все механизмы управления потоком (в отличие от Hypertrm или других программ). Включение каждого из них - это двухэтапный процесс.

  1. Когда у вас есть объект SerialPort, вызовите метод setFlowControlMode () и поразрядное ИЛИ (' | ') необходимое Последовательный порт.rxtx@qbang.org (они очень полезны)
7
ответ дан 6 December 2019 в 21:17
поделиться

(может быть слишком просто, но с таким же успехом можно где-нибудь начать ...)

Используется ли порт? Вместо:

port = (SerialPort) CommPortIdentifier.getPortIdentifier(name)
                                      .open(owner,1000)

а как насчет:

CommPortIdentifier portIdentifier;
try {
    portIdentifier = CommPortIdentifier.getPortIdentifier(name);
} catch (NoSuchPortException nspe) {
    // handle?
}
if (portIdentifier.isCurrentlyOwned()) {
    // handle?
}
port = portIdentifier.open(owner, 1000);
if (!(port instanceof SerialPort)) {
    // handle?
}

Вы принимаете какие-то исключения?

0
ответ дан 6 December 2019 в 21:17
поделиться

Я пробовал RXTX несколько месяцев назад и столкнулся с аналогичными проблемами. Я предлагаю две вещи:

  1. Создайте виртуальный компорт с помощью com0com. Включите ведение журнала трассировки. Сравните журналы, когда вы используете Hyperterminal, и когда вы запускаете свою собственную программу. Разница подчеркнет, что вы делаете неправильно.

  2. По моему скромному мнению, дизайн RXTX ошибочен, а его реализация довольно глючна (взгляните на его исходный код, что за беспорядок!). Я опубликовал альтернативную библиотеку по адресу http://kenai.com/projects/jperipheral со следующими оговорками: она предназначена только для Windows и не содержит предварительно скомпилированных двоичных файлов. Оба они изменятся в ближайшем будущем. Если вы хотите попробовать его, отправьте мне электронное письмо, используя http://desktopbeautifier.com/Main/contactus , и я пришлю вам готовую версию.

0
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: