Running Lumbermill on OS X 10.6 Snow Leopard
Lumbermill is a log viewer that useful
when you need to view and filter large quantities of java.util.logging
or Log4J logging that uses the SocketAppender
. Unfortunately,
Lumbermill stopped working on OS X after the Snow Leopard upgrade.
Here’s how to get it working again.
Symptoms
If you start Lumbermill normally, with java -jar dist/lib/lumbermill.jar then there is a problem after you select the New Server Mill menu option, and enter a port number under Please enter the port to listen on
… the window doesn’t open - nothing happens. Instead of opening the log output window, Lumbermill silently fails with the following NullPointerException (NPE):
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at com.traxel.lumbermill.desk.MillFrameControl.<init>(MillFrameControl.java:98) at com.traxel.lumbermill.Mill.<init>(Mill.java:44) at com.traxel.lumbermill.ServerMill.<init>(ServerMill.java:42) at com.traxel.lumbermill.desk.MillAction$ServerMillAction.getMill(MillAction.java:54) at com.traxel.lumbermill.desk.MillAction.actionPerformed(MillAction.java:131) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.AbstractButton.doClick(AbstractButton.java:389) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223) at com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:137) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264) at java.awt.Component.processMouseEvent(Component.java:6348) at javax.swing.JComponent.processMouseEvent(JComponent.java:3255) at java.awt.Component.processEvent(Component.java:6113) at java.awt.Container.processEvent(Container.java:2085) at java.awt.Component.dispatchEventImpl(Component.java:4714) at java.awt.Container.dispatchEventImpl(Container.java:2143) at java.awt.Component.dispatchEvent(Component.java:4544) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) at java.awt.Container.dispatchEventImpl(Container.java:2129) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4544) at java.awt.EventQueue.dispatchEvent(EventQueue.java:635) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Cause
The problem is that Lumbermill tries to use the Aqua look and feel for Swing, which does not exist any more in the version of Java shipped with Snow Leopard. This because Aqua is 32-bit code and does not run on the 64-bit Snow Leopard Java runtime.
Solution
The solution is to specify a different Swing look and feel, by setting the swing.defaultlaf system property on the command line:
java -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel -jar dist/lib/lumbermill.jar
This starts Lumbermill with Swing’s 'Metal' look and feel, and the server mill window now opens normally.