loadDatabase() 메서드가 있습니다. 메서드 자체가 완벽하게 작동합니다.별도의 스레드에서 메서드를 호출하면 NullPointerException이 발생합니다.
별도의 스레드를 만들고 loadDatabase() 메서드를 호출하면 아래와 같은 오류가 발생합니다. 주 스레드에서 잘 작동합니다.
아이디어가 있으십니까? 주 : causecode, eventid 및 description 값은 화면에 인쇄 했으므로 null이 아닙니다. 스레드
@Override
public void run()
{
HelloWorld();
}
1802에 대한 클래스
오류
15:59:58,693 INFO [stdout] (Thread-64) Importing EcentCauseSheet
15:59:58,694 INFO [stdout] (Thread-64) Cause Code is 0
15:59:58,694 INFO [stdout] (Thread-64) Event Id 4097
15:59:58,695 INFO [stdout] (Thread-64) Description is RRC CONN SETUP-SUCCESS
15:59:58,703 ERROR [stderr] (Thread-64) Exception in thread "Thread-64" java.lang.NullPointerException
15:59:58,704 ERROR [stderr] (Thread-64) at com.testapp.service.EntryConfig.loadDatabase(EntryConfig.java:131)
15:59:58,704 ERROR [stderr] (Thread-64) at com.testapp.service.EntryConfig.HelloWorld(EntryConfig.java:48)
15:59:58,704 ERROR [stderr] (Thread-64) at com.testapp.service.EntryConfig.run(EntryConfig.java:39)
자바 코드
@Stateful
@LocalBean
public class EntryConfig extends Thread implements TableDao {
@Inject
private EntityManager em;
//.......
자바 코드 IC 무효하여 HelloWorld()는 컨테이너에 의해 passivated 수 있기 때문에 상태 저장 EJB에서 스레드를 확장 {
try {
loadDatabase();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
loadDatabase에 대한 자바 코드()
public void loadDatabase()
{
InputStream inp = null;
System.out.println("Eureka Kind of .....");
try {
inp = new FileInputStream("/home/ubuntu/Downloads/test.xls");
} catch (Exception ex) {
} finally {
try {
wb = WorkbookFactory.create(inp);
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Sheet eventCauseTableSheet = wb.getSheetAt(1);
for (int i = 1; i <= eventCauseTableSheet.getLastRowNum(); i++) {
System.out.println("Importing EcentCauseSheet");
row = eventCauseTableSheet.getRow(i);
int causeCode = (int)(row.getCell(0).getNumericCellValue());
int eventId = (int)(row.getCell(1).getNumericCellValue());
String description = row.getCell(2).toString();
System.out.println("Cause Code is " + causeCode);
System.out.println("Event Id " + eventId);
System.out.println("Description is " + description);
EventCauseTable eventCauseTable = new EventCauseTable(causeCode,eventId,description);
em.persist(eventCauseTable);
System.out.println("Persisted EventCauseSheet row" + (i+1));
}
//............
finally 블록의 모든 코드는 try 블록에 있어야합니다. 그리고 예외를 무시해서는 안됩니다. 또한 EJB 확장 스레드는 심각한 디자인 냄새처럼 보입니다. –
안녕하세요 - 그래서 문제가 될 수 있습니다 – user1438082
실제 문제는 catch (예외) {} 블록에 의해 숨겨져 있습니다. 실제 예외가 기록되도록 의미있는 오류 메시지와 함께 제거하여 시작하십시오. 그리고 이것이 예외가 발생하는 곳이기 때문에 어떤 줄이 131 줄인지 알려주십시오. –