我有一個方法loadDatabase()。該方法本身工作完美。在單獨的線程中調用方法會導致NullPointerException
當我創建一個單獨的線程並調用方法loadDatabase()我得到如下所示的錯誤。 在主線程上,它工作正常。
任何想法? 注意:因爲我已將它們打印到屏幕,所以值causecode,eventid和description不爲空。
錯誤
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)
Java代碼類
@Stateful
@LocalBean
public class EntryConfig extends Thread implements TableDao {
@Inject
private EntityManager em;
//.......
Java代碼線程
@Override
public void run()
{
HelloWorld();
}
公佈IC無效的HelloWorld() {
try {
loadDatabase();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Java代碼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擴展線程看起來像是一種嚴肅的設計氣味。 – 2013-03-24 16:17:11
嗨 - 那麼可能是什麼問題 – user1438082 2013-03-24 16:20:57
真正的問題可能是你的catch(Exception){}塊隱藏的。開始刪除它,以便記錄真正的異常,並附帶有意義的錯誤消息。並告訴我們哪一行是第131行,因爲這是發生異常的地方。 – 2013-03-24 16:22:59