From: Peter G. <pe...@ar...> - 2005-06-06 14:19:41
|
On Sun, 05 Jun 2005 at 08:06:15 +0000, V. Rotaru wrote: > On 06/04/2005 04:05:12 PM, Peter Graves wrote: > > > Finally, if you're really ambitious, you could rebuild with debug > > information (javac -g), which should pin the error down to the > > offending line of code. > > Done it. Here is what I get. > > > Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException > at > org.armedbear.j.SessionProperties.saveWindowPlacement(SessionProperties > .java:75) OK. Here's the context, from src/org/armedbear/j/SessionProperties.java: private void saveWindowPlacement(Frame frame) { saveSidebarState(frame); String prefix = getPrefix(frame); if (prefix != null) { setBooleanProperty(prefix + "toolbar.show", frame.getShowToolbar()); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle r = frame.getRect(); if (r.x >= 0 && r.y >= 0 && r.width < screen.width && r.height < screen.height) { setIntegerProperty(prefix + "x", r.x); setIntegerProperty(prefix + "y", r.y); setIntegerProperty(prefix + "width", r.width); setIntegerProperty(prefix + "height", r.height); } setIntegerProperty(prefix + "extendedState", frame.retrieveExtendedState()); } } This is line 75: if (r.x >= 0 && r.y >= 0 && r.width < screen.width && r.height < screen.height) { So a NullPointerException on this line means either r is null or screen is null. The simplest fix is probably just to test both variables for null outside the block: Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle r = frame.getRect(); if (screen != null && r != null) { if (r.x >= 0 && r.y >= 0 && r.width < screen.width && r.height < screen.height) { setIntegerProperty(prefix + "x", r.x); setIntegerProperty(prefix + "y", r.y); setIntegerProperty(prefix + "width", r.width); setIntegerProperty(prefix + "height", r.height); } } That should certainly avoid the NPE. The coordinates of the frame wouldn't be saved, but that would be much less of an inconvenience. It's a mystery to me why either of these variables should be null, however, and it would certainly be interesting to know which one is the actual culprit. So a useful preliminary step would be to do something like this: Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); if (screen == null) Debug(bug("screen is null"); Rectangle r = frame.getRect(); if (r == null) Debug.bug("r is null"); if (r.x >= 0 && r.y >= 0 && r.width < screen.width && r.height < screen.height) { setIntegerProperty(prefix + "x", r.x); setIntegerProperty(prefix + "y", r.y); setIntegerProperty(prefix + "width", r.width); setIntegerProperty(prefix + "height", r.height); } And then see which bug() is triggered. I also have no idea why this problem should only come up at all when newFrame is invoked through the menu and not when it is invoked via Ctrl Shift N. And, of course, why it only seems to happen for you. Mysteries abound. > Hope this helps. That is if my instalation of Java isn't broken. I doubt your installation of Java is the problem, but something about your setup does seem to be different. Thanks for your help! -Peter |