[fedora-java] Compiling a basic SWT app on FC4

Andrew Haley aph at redhat.com
Fri Jul 15 09:46:16 UTC 2005


Ryan McDougall writes:
 > I apologize if this question is too low level for this list, but I've
 > spend the entire afternoon googling to no avail.

This is very much on-topic.

 > I am trying to compile a simple SWT app using either Sun's Java or GCJ
 > (preferably both) on my FC4 system. If I am successful at this (and the
 > process is indeed complex), I don't mind writing up a tutorial for the
 > Wiki or some such, in return.
 > 
 > I have gcj and eclipse installed, as well as Sun's 1.5 JDK (java and
 > javac are currently linked to Suns JVM, but I can change that back).
 > short. 
 > 
 > Here are the current rpms that are relevant:
 > libswt3-gtk2-3.1.0_fc-0.M6.22
 > libgcj-4.0.0-8
 > gcc-java-4.0.0-8
 > java-1.4.2-gcj-compat-devel-1.4.2.0-40jpp_31rh
 > java-1.4.2-gcj-compat-1.4.2.0-40jpp_31rh
 > 
 > Here is the simple app source in a file called TestGui.java:
 > 
 > import org.eclipse.swt.*;
 > 
 > public class TestGui
 > {
 >    public static void main (String [] args) {
 > 	      Display display = new Display ();
 > 	      Shell shell = new Shell (display);
 > 	      Label label = new Label (shell, SWT.CENTER);
 > 	      label.setText ("Hello_world");
 > 	      label.setBounds (shell.getClientArea ());
 > 	      shell.open ();
 > 	      while (!shell.isDisposed ()) {
 > 	         if (!display.readAndDispatch ()) display.sleep ();
 > 	      }
 > 	      display.dispose ();
 > 	   }
 > }
 > 
 > I have tried the following commands based on guesses based on online
 > tutorials:
 > 
 > $ gcj
 > --classpath=/usr/share/eclipse/plugins/org.eclipse.swt.gtk_3.1.0.jar /usr/lib/eclipse/plugins/org.eclipse.swt.gtk_3.1.0.jar.so --main=TestGui TestGui.java -o Test
 > 
 > Running Test gives me the following error:
 > 
 > Exception in thread "main" java.lang.LinkageError: unexpected exception
 > during linking: org.eclipse.swt.widgets.Display
 >    at java.lang.VMClassLoader.transformException(java.lang.Class,
 > java.lang.Throwable) (/usr/lib/libgcj.so.6.0.0)
 >    at java.lang.VMClassLoader.resolveClass(java.lang.Class)
 > (/usr/lib/libgcj.so.6.0.0)
 >    at java.lang.Class.initializeClass() (/usr/lib/libgcj.so.6.0.0)
 >    at TestGui.main(java.lang.String[]) (Unknown Source)
 >    at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0)
 >    at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)
 > Caused by: java.lang.NullPointerException
 >    at java.lang.VMClassLoader.resolveClass(java.lang.Class)
 > (/usr/lib/libgcj.so.6.0.0)
 >    ...4 more

OK, I had to add one line at the start of your demo:

import org.eclipse.swt.widgets.*;

And I tried to run it:

$ gij  -classpath /usr/share/eclipse/plugins/org.eclipse.swt.gtk_3.1.0.jar TestGui
Exception in thread "main" java.lang.UnsatisfiedLinkError: libswt-pi-gtk-3128: file not found
   at java.lang.Runtime._load(java.lang.String, boolean) (/usr/lib/libgcj.so.6.0.0)

So, where is libswt-pi-gtk-3128 ?  Bizzarrely, I found it in 

 $HOME/.eclipse/org.eclipse.platform_3.1.0/configuration/org.eclipse.osgi/bundles/59/1/.cp/os/linux/x86/libswt-pi-gtk-3128.so

(sorry, no, I have *no idea* why it's there)

And then I ran the test like this:

LD_LIBRARY_PATH=$HOME/.eclipse/org.eclipse.platform_3.1.0/configuration/org.eclipse.osgi/bundles/59/1/.cp/os/linux/x86 java  -classpath /usr/share/eclipse/plugins/org.eclipse.swt.gtk_3.1.0.jar TestGui

which ran fine.

There is probably some more official way of getting the path to
libswt-pi-gtk-3128.so.

Andrew.




More information about the java-devel mailing list