我正在製作Maven項目並使用UDP偵聽器部署到Wildfly 10服務器,我的Facade已連接到我的數據庫(MariaDB)。 我有一個測試網頁,我發送一個字符串來完成這個過程,問題出現在我嘗試使用UDP監聽器進行同樣的過程時。使用實體管理器的Nullpointerexception
我的UDP服務器偵聽端口並獲取消息,但使用我在網頁中使用的相同過程將我的門面上的nullpointerexception帶給我,並且每當使用實體管理器時我都會發現它。
我的UDP服務器主類(這是我用來測試的類,但它發生的情況與部署的類相同)。
public class UDPServerRun {
public static void main(String[] args) {
System.out.println("UDP Server");
try {
DatagramSocket serverSocket = new DatagramSocket(8282);
byte[] receiveData = new byte[9];
byte[] sendData = new byte[9];
while (true) {
RegistrarEntrada entrada = new RegistrarEntrada();
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
System.out.println("RECEIVED: " + sentence + "!");
entrada.setCadenaEntrada(sentence);
String cadena = entrada.registrar();
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
sendData = cadena.getBytes();
DatagramPacket sendPacket
= new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
} catch (Exception ex) {
Logger.getLogger(RegistrarEntrada.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
這是與Facade(也是測試類)連接的類。
public class RegistrarEntrada implements Serializable {
private AsistenciasFacadeLocal facade = new AsistenciasFacade();
private String cadenaEntrada;
public RegistrarEntrada() {
}
public String registrar() {
Calendar cal = Calendar.getInstance();
int idPersonal = -1;
String entradas[] = cadenaEntrada.split(" ");
String idChecador = entradas[0];
String idTarjeta = entradas[1];
//String idChecador = "A1";
//String idTarjeta = "F37C96";
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
//try {
idPersonal = facade.consultarIdPersonal(idTarjeta);
// } catch (Exception e) {
// System.out.println(e);
// }
if (idPersonal != -1) {
Personal persona = facade.consultarPersona(idPersonal);
if (persona != null) {
facade.registrarEntrada(idPersonal, idChecador);
return persona.getNombre() + " se registro a las: " + timeFormat.format(cal.getTime());
} else {
return "Error 02";
}
} else {
return "Error 01";
}
}
//Getters and Setters
public String getCadenaEntrada() {
return cadenaEntrada;
}
public void setCadenaEntrada(String cadenaEntrada) {
this.cadenaEntrada = cadenaEntrada;
}
public AsistenciasFacadeLocal getFacade() {
return facade;
}
public void setFacade(AsistenciasFacadeLocal facade) {
this.facade = facade;
}
}
門面(我將標記我得到錯誤的線)。
@Stateless
public class AsistenciasFacade implements AsistenciasFacadeLocal, AsistenciasFacadeRemote {
@PersistenceContext(unitName = "uvaqAsistenciasPU")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
}
public AsistenciasFacade() {
getEntityManager();
}
@Override
public void registrarEntrada(int idPersonal, String idChecador) {
Registros registro = new Registros();
Calendar fecha = Calendar.getInstance();
registro.setIdpersonal(idPersonal);
registro.setFechahoraregistro(fecha.getTime());
registro.setIdchecador(idChecador);
em.persist(registro);
}
@Override
public Personal consultarPersona(int idPersonal) {
String query = "SELECT * FROM personal WHERE IDPERSONAL=" + idPersonal;
List<Personal> objList = null;
objList = em.createNativeQuery(query, Personal.class).getResultList();
if (objList.size() != 0) {
return objList.get(0);
} else {
return null;
}
}
@Override
public int consultarIdPersonal(String idTarjeta) {
int idPersonal;
String query = "SELECT * FROM credenciales WHERE IDTARJETA = '" + idTarjeta + "'";
List<Credenciales> objList = null;
objList = em.createNativeQuery(query, Credenciales.class).getResultList(); //<====== The error happens here and also in every place where I use the entity manager
if (objList.size() != 0) {
idPersonal = Integer.parseInt(objList.get(0).getIdpersonal());
return idPersonal;
} else {
return -1;
}
}
@Override
public void sincronizarPersonal(List<String[]> personal) {
System.out.println("Funcion Sincronizar Personal en Asistencias");
List<Personal> nuevoPersonaltodos = new ArrayList<>();
for (int i = 0; i < personal.size(); i++) {
Personal nuevoPersonal = new Personal();
nuevoPersonal.setIdpersonal(Integer.parseInt(personal.get(i)[0]));
nuevoPersonal.setNombre(personal.get(i)[1]);
nuevoPersonal.setApellidopat(personal.get(i)[2]);
nuevoPersonal.setApellidomat(personal.get(i)[3]);
nuevoPersonal.setIdstatusper(Integer.parseInt(personal.get(i)[4]));
nuevoPersonaltodos.add(nuevoPersonal);
}
try {
em.persist(nuevoPersonaltodos);
} catch (Exception e) {
System.out.println(e);
}
}
}
我試圖解釋這個問題,我現在還沒有服務器日誌,但只要我能得到它,我將它寫在這裏。
編輯: 我的日誌說這個。
GRAVE: null
java.lang.NullPointerException
歡迎來到Stack Overflow!請查看我們的[SO問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)來幫助你提出一個好問題,從而得到一個很好的答案。 –
發佈異常堆棧跟蹤。 – lexicore