Неустранимая ошибка, вызванная java xbee lib при отправке данныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Неустранимая ошибка, вызванная java xbee lib при отправке данных

Сообщение Anonymous »

Я пытаюсь написать код, который будет связываться между xbee, подключенным к моему компьютеру через USB, с другим xbee, который я подключил к Arduino. Я скачал библиотеку и настроил все в eclipse, но когда я пытаюсь запустить пример кода, поставляемый с библиотекой, возникает фатальная ошибка.

Код: Выделить всё

import com.digi.xbee.api.WiFiDevice;
import com.digi.xbee.api.XBeeDevice;
import com.digi.xbee.api.exceptions.XBeeException;
import com.digi.xbee.api.models.XBeeProtocol;

public class XbeeSending {
/* Constants */
// TODO Replace with the port where your sender module is connected to.
private static final String PORT = "COM3";
// TODO Replace with the baud rate of your sender module.
private static final int BAUD_RATE = 9600;
private static final String DATA_TO_SEND = "100";
public static void main(String[] args) {
XBeeDevice myDevice = new XBeeDevice(PORT, BAUD_RATE);
byte[] dataToSend = DATA_TO_SEND.getBytes();
try {
myDevice.open();
System.out.format("Sending broadcast data: '%s'", new String
(dataToSend));
if (myDevice.getXBeeProtocol() == XBeeProtocol.XBEE_WIFI) {
myDevice.close();
myDevice = new WiFiDevice(PORT, BAUD_RATE);
myDevice.open();
((WiFiDevice)myDevice).sendBroadcastIPData(0x2616, dataToSend);
} else
myDevice.sendBroadcastData(dataToSend);
System.out.println(" >> Success");
} catch (XBeeException e) {
System.out.println(" >> Error");
e.printStackTrace();
System.exit(1);
} finally {
myDevice.close();
}
}
}
который выводит:
[main] INFO com.digi.xbee.api.XBeeDevice - [COM3 - 9600/8/N/1 /N] Открытие интерфейса подключения...
[main] INFO com.digi.xbee.api.XBeeDevice - [COM3 - 9600/8/N/1/N] Интерфейс подключения open.
Средой выполнения Java обнаружена фатальная ошибка:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) по адресу pc=0x00000001800044cb, pid=22096, tid =16868
Версия JRE: среда выполнения Java(TM) SE (17.0.2+8) (сборка 17.0.2+8-LTS-86)
ВМ Java: 64-разрядная серверная виртуальная машина Java HotSpot(TM) (17.0.2+8-LTS-86, смешанный режим, общий доступ, многоуровневая, сжатые oops, сжатые ptrs классов, g1 gc, windows-amd64)
Проблемный кадр:
C [rxtxSerial.dll+0x44cb]
Хотя в ошибке упоминается что-то связанное с rxtx, у меня также есть код для тестирования библиотеки rxtx, которая отлично работает на eclipse. Большинство ответов здесь и в других местах представляют собой что-то вроде «это ошибка в JVM», но мне было интересно, есть ли что-то специфическое для xbee, что кто-то другой мог бы попытаться решить эту проблему, поскольку некоторые ответы в Интернете были из совершенно разных библиотек, и их решения, похоже, у меня не работают, или, возможно, кто-то может попытаться запустить код на другой машине (на моей машине Intel i7-10700k и 32 ГБ оперативной памяти) или скажите мне, есть ли кое-что я упускаю из виду, потому что никогда раньше не работал с этой библиотекой.
В XCTU в ручном режиме я могу прекрасно передавать информацию между двумя Xbees, и Arduino получит информацию и выполнять функции соответствующим образом, я также настроил xbee на «API Enabled [1]», так что, насколько я могу судить по моему тестированию, проблема не должна исходить от самих xbees. Что касается самого кода, то он взят прямо из примеров библиотеки xbee, за исключением порта, который в моем случае является COM3, скорость передачи данных и все другие параметры также соответствуют информации из XCTU на моем компьютере. Я также считал, что проблема может быть в rxtx, но следующий код, который я нашел в Интернете, похоже, работает нормально и завершается без ошибок:

Код: Выделить всё

import gnu.io.CommPortIdentifier;

import gnu.io.SerialPort;
import gnu.io.PortInUseException;
import gnu.io.UnsupportedCommOperationException;
import gnu.io.NoSuchPortException;
import java.io.OutputStream;
import java.io.IOException;

public class XbeeSending {
private static final String PORT_NAME = "COM3";
private static final int BAUD_RATE = 9600;

public static void main(String[] args) {
CommPortIdentifier portId = null;
SerialPort serialPort = null;

try {
portId = CommPortIdentifier.getPortIdentifier(PORT_NAME);
serialPort = (SerialPort) portId.open("100", 2000);
serialPort.setSerialPortParams(BAUD_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

OutputStream outputStream = serialPort.getOutputStream();
outputStream.write("100".getBytes());
System.out.println("Data sent successfully.");

} catch (NoSuchPortException | PortInUseException | UnsupportedCommOperationException | IOException e) {
e.printStackTrace();
} finally {
if (serialPort != null) {
serialPort.close();
}
}
}
}
Я также пробовал множество разных версий jdk. Я запускал этот конкретный пример в jdk 17, но также пробовал 15, 20 и 22, и все они выдают одну и ту же ошибку. . Библиотека xbee доступна по адресу https://github.com/digidotcom/xbee-java/releases, если кто-то захочет попробовать запустить этот код на своем компьютере. Я также просмотрел исходный код библиотеки, в частности «AbstractXBeeDevice», поскольку именно там сообщения журнала печатаются в строке 3115.

Подробнее здесь: https://stackoverflow.com/questions/787 ... nding-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»