Поскольку несколько других указали в целом, что это не проблема.
единственный случай это вызовет Вас, проблемы - то, если Вы возвращаетесь посреди оператора использования и дополнительно возвращаетесь в использовании переменной. Но с другой стороны, это также вызвало бы, Вы выходите, даже если Вы не возвратили и просто сохранили ссылку на переменную.
using ( var x = new Something() ) {
// not a good idea
return x;
}
Так же, как плохо
Something y;
using ( var x = new Something() ) {
y = x;
}
Хорошо, извините, что мне потребовалось так много времени, чтобы вернуться к этому вопросу. Вот как у меня все заработало.
Примечание: этот метод НЕ будет работать для всех, пожалуйста, прочтите ниже, прежде чем копировать / вставлять в свой собственный код
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 или других программ). Включение каждого из них - это двухэтапный процесс.
setFlowControlMode ()
и поразрядное ИЛИ (' |
') необходимое Последовательный порт.rxtx@qbang.org (они очень полезны)
(может быть слишком просто, но с таким же успехом можно где-нибудь начать ...)
Используется ли порт? Вместо:
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?
}
Вы принимаете какие-то исключения?
Я пробовал RXTX несколько месяцев назад и столкнулся с аналогичными проблемами. Я предлагаю две вещи:
Создайте виртуальный компорт с помощью com0com. Включите ведение журнала трассировки. Сравните журналы, когда вы используете Hyperterminal, и когда вы запускаете свою собственную программу. Разница подчеркнет, что вы делаете неправильно.
По моему скромному мнению, дизайн RXTX ошибочен, а его реализация довольно глючна (взгляните на его исходный код, что за беспорядок!). Я опубликовал альтернативную библиотеку по адресу http://kenai.com/projects/jperipheral со следующими оговорками: она предназначена только для Windows и не содержит предварительно скомпилированных двоичных файлов. Оба они изменятся в ближайшем будущем. Если вы хотите попробовать его, отправьте мне электронное письмо, используя http://desktopbeautifier.com/Main/contactus , и я пришлю вам готовую версию.