Я впервые за последние несколько лет коснулся Java. Мне было поручено создать исполняемый файл Jar, который будет вызываться для связи с устройством считывания карт RFID. Теперь мой код прекрасно работает в режиме отладки, однако, когда я просто пытаюсь запустить программу, я получаю исключение NullPointerException. Извините, если ответ очевиден, но прошло некоторое время с тех пор, как я коснулся Java.
Я использую Eclipse IDE (2019)
Любая помощь будет наиболее ценной
package rfid;
import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Formatter;
import javax.xml.bind.DatatypeConverter;
public class RFID_TEST {
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}// for
return data;
} // hexStringToByteArray
public static String[] reverse(String[] nums) {
String[] reversed = new String[nums.length];
for (int i=0; i<nums.length; i++) {
reversed[i] = nums[nums.length - 1 - i];
}
return reversed;
}
static String byteToHex(final byte[] hash)
{
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
public static void main (String[] args) {
String[] portNames = SerialPortList.getPortNames();
for(int i = 0; i < portNames.length; i++) {
System.out.println(portNames[i]);
}
String portReader2 = "";
SerialPort serialPort = new SerialPort("COM4");
try {
serialPort.openPort();//Open serial port
serialPort.setParams(38400,8,1,0);
byte[] bytesToSend = new byte[] {};
bytesToSend = hexStringToByteArray("020008010000020001aa550000b463");
serialPort.writeBytes(bytesToSend);//Write data to port
byte[] portReader = new byte[] {};
portReader = serialPort.readBytes();// read response
//portReader2 = DatatypeConverter.printHexBinary(portReader);
portReader2 = byteToHex(portReader);
System.out.println(portReader2);
String portReader3 = portReader2.substring(22, 36);
System.out.println(portReader3);
String[] array= portReader3.split("(?<=\\G.{2})");
System.out.println(java.util.Arrays.toString(array));
String[] finalArray = reverse(array);
String str="";
for(int i=0;i<finalArray.length;i++)
str+=finalArray[i];
String finalOne = str.replaceAll("\\s+","");
BigInteger hex = new BigInteger(finalOne, 16);
System.out.println(hex);
serialPort.closePort();//Close serial port
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
Однако при выходе из режима отладки я получаю следующее исключение NullPointerException
COM3
COM4
Exception in thread "main" java.lang.NullPointerException
at rfid.RFID_TEST.byteToHex(RFID_TEST.java:36)
at rfid.RFID_TEST.main(RFID_TEST.java:65)