Re: [Fwd: compiling errors with latest gcc 4.4 and AWT/Swing]

Andrew John Hughes <[email protected]>
Newsgroups gmane.comp.java.classpath.devel
Message-ID <[email protected]>
2009/4/14 David Michel <[email protected]>:
> Hi All,
>
> I was recently trying to run a java project, developed for and run
> with Sun's java, with the gcc compiler instead. When I first installed
> the gcj available from the Ubuntu repository, I ran into compilation
> erros and then realised that the version shipped on the repos was
> relatively old  (4.2.4) so I decided to upgrade it to the latest one,
> hoping that these compilation issues will get resolved.
>
> With great help from this forum, I got the newest GCC running on my
> machine with the following commands:
>
> $ svn co http://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch/
> $ mkdir gcc-4_4-branch/obj-x86_64-unknown-linux-gnu
> $ cd gcc-4_4-branch/obj-x86_64-unknown-linux-gnu
> $ `pwd`/../configure --enable-languages=java
> --prefix=/local/gcc-4_4-branch/install --enable-java-home
> --enable-java-awt=gtk
> $ make && make install
> $ /local/gcc-4_4-branch/install/lib/jvm/bin/java -version java version
> "1.5.0" gij (GNU libgcj) version 4.4.0 20090330 (prerelease)
>
> Using Eclipse, I linked my project to the newly installed JRE
> (JRE home directory on '/local/gcc-4_4-branch/install/lib/jvm' ; JRE
> system libraries on
> '/local/gcc-4_4-branch/install/share/java/libgcj-4.4.0.jar' and the
> sourcefile on '~/gcc-4_4-branch/libjava/classpath' )
>
> When I try ro tun the project (from Eclipse), I ran into exactly the
> same compilation errors as encountered with the older gcc version:
>
> Exception in thread "main" java.lang.IllegalArgumentException
>  at javax.swing.ScrollPaneLayout.addLayoutComponent(ScrollPaneLayout.java:148)
>  at java.awt.Container.addImpl(Container.java:392)
>  at java.awt.Container.add(Container.java:230)
>  at nl.kbna.dioscuri.GUI.setScreen(GUI.java:512)
>  at nl.kbna.dioscuri.GUI.<init>(GUI.java:256)
>  at nl.kbna.dioscuri.GUI.<init>(GUI.java:295)
>  at nl.kbna.dioscuri.GUI.main(GUI.java:213)
>
> The problem seem to lie with AWT and Swing... and by digging deeper
> into the code I found that:
>
> In GUI.java the following call is made:
>       screenPane.add(screen);
> This works using Sun's Java, but causes a IllegalArgumentException in
> GCJ and the reason seems to be as follows:
>
> GCJ java.awt.Container class on line 276 contains code for the above call:
>       add(Component comp)
>       {
>               addImpl(comp, null, -1)
>       }
>
> The addImpl function calls, near the end (line 390):
>       layoutMgr.addLayoutComponent("", comp);
> because it was passed null constraints.
>
> The ScrollPaneLayout class implements the addLayoutComp (line 125):
>       addLayoutComponent(String key, Component component)
> but notice that the 'key' variable has been passed an empty String;
> this function now throws an IllegalArgumentException.
>
> .... As anyone had this sort of problem ? Any idea how to fix it ?
> Could it be a problem of mixing AWT and Swing together ?
>
> Regards
>
> David Michel
>
>

It's not necessary to mix the two to trigger this bug.  You merely
need to add a component to a component using the ScrollPaneLayout:

  public TestSwing()
  {
    setLayout(new ScrollPaneLayout());
    add(new JButton());
  }

This runs on IcedTea but fails on Classpath:

Exception in thread "main" java.lang.IllegalArgumentException
   at javax.swing.ScrollPaneLayout.addLayoutComponent(ScrollPaneLayout.java:148)
   at java.awt.Container.addImpl(Container.java:392)
   at java.awt.Container.add(Container.java:297)
   at javax.swing.JFrame.addImpl(JFrame.java:264)
   at java.awt.Container.add(Container.java:230)
   at TestSwing.<init>(TestSwing.java:12)
   at TestSwing.main(TestSwing.java:17)

The error is not in ScrollPaneLayout.  Changing the code to:

    ScrollPaneLayout l = new ScrollPaneLayout();
    l.addLayoutComponent("", new JButton());

correctly triggers an IllegalArgumentException on both IcedTea and Classpath:

$ cacao TestSwing
Exception in thread "main" java.lang.IllegalArgumentException
   at javax.swing.ScrollPaneLayout.addLayoutComponent(ScrollPaneLayout.java:148)
   at TestSwing.<init>(TestSwing.java:12)
   at TestSwing.main(TestSwing.java:19)

$ /usr/lib/icedtea6/bin/java TestSwing
Exception in thread "main" java.lang.IllegalArgumentException: invalid
layout key
	at javax.swing.ScrollPaneLayout.addLayoutComponent(ScrollPaneLayout.java:257)
	at TestSwing.<init>(TestSwing.java:12)
	at TestSwing.main(TestSwing.java:19)

Existing bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39553
-- 
Andrew :-)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

Support Free Java!
Contribute to GNU Classpath and the OpenJDK
http://www.gnu.org/software/classpath
http://openjdk.java.net

PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint: F8EF F1EA 401E 2E60 15FA  7927 142C 2591 94EF D9D8
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.