我很难找到导致此 AWT-EventQueue-0 NullPointerException 错误的原因。我已将其缩小到这两种方法中的某个地方。我认为从我的阅读中 AWT 与动作事件有关,所以我的猜测是在 actionPerformed 方法中,但你的猜测和我的一样好。这个问题绝对不是重复的,因为它完全是这段代码独有的。
public void actionPerformed(ActionEvent e) {
int saveType = 0;
String buttonString = e.getActionCommand();
if (buttonString.equals("Shutdown >>")) {
shutdownServer();
}
else if (buttonString.equals("Save >>")) {
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new java.io.File("."));
fc.setDialogTitle("Save file");
FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt", "txt", "text");
fc.setFileFilter(filter);
int select = fc.showSaveDialog(null);
if (select == JFileChooser.APPROVE_OPTION)
{
File fi = fc.getSelectedFile();
fileName = fi.getPath();
if (fileRB.isSelected()) {
dbDisplaytx.setText("REPORT SAVED TO FILE");
saveType = 1;
}
else if (databaseRB.isSelected()) {
dbDisplaytx.setText("REPORT SAVED TO DATABASE");
saveType = 2;
}
else if (bothRB.isSelected()) {
dbDisplaytx.setText("REPORT SAVED TO BOTH FILE & DATABASE");
saveType = 3;
}
else {
// stub to test radio button
dbDisplaytx.setText("WRONG SELECTION");
}
}
produceProfileReport(saveType);
}
}
这是第二种方法
private void produceProfileReport(int saveType) {
OperationalProfileReportGeneratorFactory reportGeneratorFactory = SimpleOperationalProfileReportGeneratorFactory
.getInstance();
OperationalProfileReportGenerator reportGenerator = reportGeneratorFactory
.newReportGenerator();
//Saves to file
if(saveType == 1 || saveType == 3){
try {
FileWriter writer = new FileWriter(fileName);
writer.write(reportGenerator.generateReport(database));
writer.flush();
writer.close();
} catch (IOException ioe) {
display.displayMessage(UNABLE_TO_WRITE_PROFILE_REPORT_ERROR_MESSAGE
+ fileName);
} // try...catch (IOException)
}
//Saves to database
else if(saveType == 2 || saveType == 3) {
try {
FileWriter writer = new FileWriter(fileName);
//reportGenerator.generateReport(database)
writer.write("WRITE TO DATABASE");
writer.flush();
writer.close();
} catch (IOException ioe) {
display.displayMessage(UNABLE_TO_WRITE_PROFILE_REPORT_ERROR_MESSAGE
+ fileName);
}
}
}
生成报告()
public String generateReport(OperationalProfileDatabase database) {
synchronized (database) {
if (database.getNumberOfOperationalProfiles() == 0) {
return NO_PROFILES_RECEIVED_REPORT;
} else {
database.toSQL();
return database.toString();
} // if (database.getNumberOfOperationalProfiles() == 0)
} // synchronized (database)
}
堆栈跟踪
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at oplogger.server.reportgen.SimpleOperationalProfileReportGenerator.generateReport(SimpleOperationalProfileReportGenerator.java:49)
at oplogger.server.ui.AdministrationTerminal_GUI.produceProfileReport(AdministrationTerminal_GUI.java:130)
at oplogger.server.ui.AdministrationTerminal_GUI.actionPerformed(AdministrationTerminal_GUI.java:279)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)