Hello Tharindu and Alexei. Good news - I was able to start FreeCol. :)
getUI exception was the last exception and after I've fixed it FreeCol successfully started on Harmony. But it is still not playable. Some modal dialogs are broken and don't respond to keyboard and mouse, so it's impossible to close them. Also there are many small UI bugs and a strange problem with performance (FreeCol is very slow on Harmony :/ ). I have attached a patch to this issue [1]. The problem was that getUI method didn't create default createUI methods for registered Look and Feel components of FreeCol. Tharindu, so the main problems now are buggy modal dialogs, performance and many bugs in UI. Actually, modal dialogs problem is showstopper, so I think it should be fixed first. [1] http://issues.apache.org/jira/browse/HARMONY-4252 2008/4/4, Alexei Fedotov <[EMAIL PROTECTED]>: > > Tharindu, > Yes, learning basics is a proper thing to do. I found your article > much better than the book I had read [1]. > > [1] Kathy Walrath, Mary Campione The JFC Swing Tutorial > http://books.google.com/books?id=3rWTX-vjUhEC&printsec=frontcover > > > On Fri, Apr 4, 2008 at 8:59 PM, Tharindu Mathew <[EMAIL PROTECTED]> > wrote: > > Before digging deep on the problem, I feel I should understand the Swing > > subsystem more. I'm reading the following article to get a proper idea. > > > > http://java.sun.com/products/jfc/tsc/articles/architecture/ > > > > Please tell me if there is more relevant articles that will help me > along > > the way. Thanks for the help. > > > > > > On Fri, Apr 4, 2008 at 7:17 PM, Alexei Fedotov < > [EMAIL PROTECTED]> > > wrote: > > > > > > > > > Tharindu, > > > Thanks for the question. If I understand you correctly UIDefaults > hash > > > table does not contain a proper value for a method to call for the > key > > > corresponding to JRootPane.class. Why? The brief answer is "I don't > > > know". Keep digging deeper. BTW, do we have swing gurus on the list > > > who could shed the light on the problem? > > > > > > To guess what should be in the method variable I suggest you setting > a > > > breakpoint on this line and try to collect a statistics for working > > > swing demos. Why do they work? If JRootPanne would work, it probably > > > has a different look and feel or setup in standard demos. > > > > > > I like that you have come with the guess. I checked how setUI() is > > > called from java/common/javax/swing/JRootPane.java: it is mentioned > > > three times as in other components. So, keeping an eye on this method > > > does not help. I believe someone should register a method for this > > > class in UIDefaults, for example, call new UIDefaults(a proper > array). > > > I found that this is done in the following places. > > > > > > $ grep -rlI 'new UIDefaults' ./java/common/javax/swing/* | grep -v > svn > > > ./java/common/javax/swing/LookAndFeel.java > > > ./java/common/javax/swing/UIManager.java > > > ./java/common/javax/swing/plaf/basic/BasicLookAndFeel.java > > > ./java/common/javax/swing/plaf/metal/MetalLookAndFeel.java > > > ./java/common/javax/swing/plaf/multi/MultiLookAndFeel.java > > > ./java/common/javax/swing/plaf/synth/SynthLookAndFeel.java > > > ./java/common/javax/swing/text/AbstractDocument.java > > > > > > Based on this list I may guess that the chosen look and feel does not > > > register JRootPane look and feel correctly. Please, keep us posted on > > > your advances. > > > > > > Thanks! > > > > > > On Fri, Apr 4, 2008 at 10:12 AM, Tharindu Mathew <[EMAIL PROTECTED] > > > > > wrote: > > > > ERROR: UIDefaults.getUI() failed: java.lang.NullPointerException > > > > at javax.swing.UIDefaults.getUI(UIDefaults.java:339) > > > > at javax.swing.UIManager.getUI(UIManager.java:222) > > > > at javax.swing.JPanel.updateUI(JPanel.java:141) > > > > at javax.swing.JPanel.<init>(JPanel.java:56) > > > > at javax.swing.JPanel.<init>(JPanel.java:76) > > > > at javax.swing.JRootPane.createGlassPane(JRootPane.java:278) > > > > at javax.swing.JRootPane.<init>(JRootPane.java:78) > > > > at javax.swing.JFrame.createRootPane(JFrame.java:175) > > > > at javax.swing.JFrame.frameInit(JFrame.java:393) > > > > at javax.swing.JFrame.<init>(JFrame.java:123) > > > > at > > > > > > > > > > net.sf.freecol.client.gui.FullScreenFrame.<init>(FullScreenFrame.java:34) > > > > at > > > net.sf.freecol.client.FreeColClient.startGUI(FreeColClient.java:218) > > > > at > > > net.sf.freecol.client.FreeColClient.access$000(FreeColClient.java:31) > > > > at > net.sf.freecol.client.FreeColClient$1.run(FreeColClient.java:142) > > > > at > > > java.awt.event.InvocationEvent.runAndNotify(InvocationEvent.java:98) > > > > at > java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:78) > > > > at > > > java.awt.EventQueueCore.dispatchEventImpl(EventQueueCore.java:138) > > > > at java.awt.EventQueue.dispatchEvent(EventQueue.java:144) > > > > at > > > > > java.awt.EventDispatchThread.runModalLoop(EventDispatchThread.java:74) > > > > at > java.awt.EventDispatchThread.run(EventDispatchThread.java:48) > > > > > > > > > > > > In the UI defaults class: > > > > > > > > Method method = null; > > > > if (uiClass == null) { > > > > uiClass = getUIClass(classID, > > > > comp.getClass().getClassLoader()); > > > > method = getCreateUIMethodPriveledged(uiClass); > > > > > > > > put(fullClassName, uiClass); > > > > put(uiClass, method); > > > > } else { > > > > method = (Method)get(uiClass); *<--- method is > null, > > > because > > > > no value exists for the uiClass key* > > > > } > > > > return (ComponentUI)method.invoke(null, new Object[] { > comp > > > }); > > > > *<--- causes NPE when tryin to invoke* > > > > > > > > What is supposed to return to the method variable? Does this > return > > > null > > > > because the setUI() method is not called from within JRootPane? > > > > > > > > -- > > > > Regards, > > > > > > > > Tharindu > > > > > > > > > > > > > > > > -- > > > With best regards, > > > Alexei > > > > > > > > > > > -- > > Regards, > > > > Tharindu > > > > > > > -- > With best regards, > > Alexei > -- Thanks, Aleksey
