javax Timer 上的 NullPointerException?
NullPointerException on javax Timer?
我想在状态栏上显示一个计时器。
我如何摆脱“在线下方抛出 NullPointerException”t = earthclock.getTimeStamp()?
public void startEarthTimer() {
//final String t = null;
earthTimer = new javax.swing.Timer(TIMEDELAY,
new ActionListener() {
//String t = null;
public void actionPerformed(ActionEvent evt) {
String t = null;
//leftLabel.setText(statusText);
try {
// TODO: investigate why the line below is causing NullPointerException
EarthClock earthclock = Simulation.instance().getMasterClock().getEarthClock();
t = earthclock.getTimeStamp();
} catch (Exception ee) {
ee.printStackTrace(System.err);
}
timeLabel.setText("Earth Time: " + t);
}
});
earthTimer.start();
}
跟踪堆栈是这样说的:
java.lang.NullPointerException
at org.mars_sim.msp.ui.swing.MainWindow.actionPerformed(MainWindow.java:277)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.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)
at java.awt.EventDispatchThread.run(Unknown Source)
我的 getTimeStamp() 并不复杂:
public synchronized String getTimeStamp() {
String result = formatter.format(cal.getTime());// + " UT";
if (result == null) result = "0";
return result;
}
我的 EarthClock 也是这样的:
public class EarthClock {
private final GregorianCalendar cal;
private final SimpleDateFormat formatter;
public EarthClock(String dateString) {
// Use GregorianCalendar constructor
cal = new GregorianCalendar();
// Set GMT timezone for calendar
SimpleTimeZone zone = new SimpleTimeZone(0, "GMT");
cal.setTimeZone(zone);
// Initialize formatter
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'UT'");
formatter.setTimeZone(zone);
// Set Earth clock to Martian Zero-orbit date-time.
// This date may need to be adjusted if it is inaccurate.
cal.clear();
DateFormat tempFormatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
tempFormatter.setTimeZone(zone);
try {
cal.setTime(tempFormatter.parse(dateString));
} catch (ParseException ex) {
throw new IllegalStateException(ex);
}
}
我已经尝试了 3 个位置来将 "String t=null" 放置在方法 startEarthTimer() 中并且 none 有效。我在主 class 中也有 String t=null,在所有情况下它都会抛出 NullPointerException。
谁能指出哪里出了问题?
非常感谢!
编辑:在 MasterClock 中,我启动了一个 EarthClock 实例,如下所示:
public MasterClock() {
// Initialize data members
SimulationConfig config = SimulationConfig.instance();
// Create an Earth clock
earthTime = new EarthClock(config.getEarthStartDateTime());
....
}
方法 getEarthClock()
正在返回 null
。尝试像这样分解您的代码,并添加一些健全性检查以确定哪个方法返回 null:
MasterClock master = Simulation.instance().getMasterClock();
if (master == null) {
throw new IllegalStateException("master clock is null");
}
EarthClock earthclock = master.getEarthClock();
if (earthclock == null) {
throw new IllegalStateException("earthclock is null");
}
t = earthclock.getTimeStamp();
您可能错误配置了地球时钟,或者可能缺少您正在使用的库所需的某些配置。
我想在状态栏上显示一个计时器。
我如何摆脱“在线下方抛出 NullPointerException”t = earthclock.getTimeStamp()?
public void startEarthTimer() {
//final String t = null;
earthTimer = new javax.swing.Timer(TIMEDELAY,
new ActionListener() {
//String t = null;
public void actionPerformed(ActionEvent evt) {
String t = null;
//leftLabel.setText(statusText);
try {
// TODO: investigate why the line below is causing NullPointerException
EarthClock earthclock = Simulation.instance().getMasterClock().getEarthClock();
t = earthclock.getTimeStamp();
} catch (Exception ee) {
ee.printStackTrace(System.err);
}
timeLabel.setText("Earth Time: " + t);
}
});
earthTimer.start();
}
跟踪堆栈是这样说的:
java.lang.NullPointerException
at org.mars_sim.msp.ui.swing.MainWindow.actionPerformed(MainWindow.java:277)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.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)
at java.awt.EventDispatchThread.run(Unknown Source)
我的 getTimeStamp() 并不复杂:
public synchronized String getTimeStamp() {
String result = formatter.format(cal.getTime());// + " UT";
if (result == null) result = "0";
return result;
}
我的 EarthClock 也是这样的:
public class EarthClock {
private final GregorianCalendar cal;
private final SimpleDateFormat formatter;
public EarthClock(String dateString) {
// Use GregorianCalendar constructor
cal = new GregorianCalendar();
// Set GMT timezone for calendar
SimpleTimeZone zone = new SimpleTimeZone(0, "GMT");
cal.setTimeZone(zone);
// Initialize formatter
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'UT'");
formatter.setTimeZone(zone);
// Set Earth clock to Martian Zero-orbit date-time.
// This date may need to be adjusted if it is inaccurate.
cal.clear();
DateFormat tempFormatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
tempFormatter.setTimeZone(zone);
try {
cal.setTime(tempFormatter.parse(dateString));
} catch (ParseException ex) {
throw new IllegalStateException(ex);
}
}
我已经尝试了 3 个位置来将 "String t=null" 放置在方法 startEarthTimer() 中并且 none 有效。我在主 class 中也有 String t=null,在所有情况下它都会抛出 NullPointerException。
谁能指出哪里出了问题? 非常感谢!
编辑:在 MasterClock 中,我启动了一个 EarthClock 实例,如下所示:
public MasterClock() {
// Initialize data members
SimulationConfig config = SimulationConfig.instance();
// Create an Earth clock
earthTime = new EarthClock(config.getEarthStartDateTime());
....
}
方法 getEarthClock()
正在返回 null
。尝试像这样分解您的代码,并添加一些健全性检查以确定哪个方法返回 null:
MasterClock master = Simulation.instance().getMasterClock();
if (master == null) {
throw new IllegalStateException("master clock is null");
}
EarthClock earthclock = master.getEarthClock();
if (earthclock == null) {
throw new IllegalStateException("earthclock is null");
}
t = earthclock.getTimeStamp();
您可能错误配置了地球时钟,或者可能缺少您正在使用的库所需的某些配置。