Bug 156005
| Summary: | AWT peer not found when executing Java code | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Dave Atkinson <da> | ||||
| Component: | gcc | Assignee: | Jakub Jelinek <jakub> | ||||
| Status: | CLOSED RAWHIDE | QA Contact: | |||||
| Severity: | medium | Docs Contact: | |||||
| Priority: | medium | ||||||
| Version: | 4 | CC: | fitzsim, nmiell, ryo-dairiki, tjb | ||||
| Target Milestone: | --- | ||||||
| Target Release: | --- | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | 4.0.0-13 | Doc Type: | Bug Fix | ||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2005-06-25 19:39:29 UTC | Type: | --- | ||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Attachments: |
|
||||||
|
Description
Dave Atkinson
2005-04-26 16:03:07 UTC
Are you sure you are using libgcj-4.0.0-1?
With that and java-1.4.2-gcj-compat-1.4.2.0-40jpp_18rh it works just fine for me:
import java.awt.*;
import java.awt.event.*;
class HelloAWT extends Frame {
private static String message = "Hello AWT!";
HelloAWT() {
super(message);
}
public void paint(Graphics g) {
// get the windows width and height
Dimension d = getSize();
// get the internal margins
Insets i = getInsets();
// calculate the center point
int cx = i.left + (d.width - i.left - i.right) / 2;
int cy = i.top + (d.height - i.top - i.bottom) / 2;
// get the attributes of the text
FontMetrics fm = g.getFontMetrics();
// get the width of the message
int width = fm.stringWidth(message);
int height = fm.getHeight();
// draw the string
g.drawString(message, cx - width / 2, cy + height / 2);
}
public static void main(String[] args) {
// create the window
Frame f = new HelloAWT();
// insert event handler for exiting the application
f.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setBounds(50, 50, 200, 200);
f.show();
}
}
rpm -q gcc libgcj java-1.4.2-gcj-compat; java -cp `pwd` HelloAWT
gcc-4.0.0-1
libgcj-4.0.0-1
java-1.4.2-gcj-compat-1.4.2.0-40jpp_18rh
(.:16278): Gtk-WARNING **: cannot open display:
(this is without X running, but from strace the Gtk peers are clearly loaded).
gcc-4.0.0-1 certainly has the patch mentioned in 150453.
As sure as I can be...
[user@computer ~]$ date
Wed Apr 27 15:01:54 BST 2005
[user@computer ~]$ yum -e gcc
(snip...)
[user@computer ~]$ yum install gcc libgcj java-1.4.2-gcj-compat-devel
(snip...)
[user@computer ~]$ rpm -q gcc libgcj java-1.4.2-gcj-compat
gcc-4.0.0-1
libgcj-4.0.0-1
java-1.4.2-gcj-compat-1.4.2.0-40jpp_18rh
[user@computer ~]$ javac HelloAWT.java && java -cp `pwd` HelloAWT
----------
1. WARNING in HelloAWT.java
(at line 4)
class HelloAWT extends Frame {
^^^^^^^^
The serializable class HelloAWT does not declare a static final serialVersionUID
field of type long
----------
1 problem (1 warning)Exception in thread "main" java.awt.AWTError: Cannot load
AWT toolkit: gnu.java.awt.peer.gtk.GtkToolkit
at java.awt.Toolkit.getDefaultToolkit() (/usr/lib64/libgcj.so.6.0.0)
at java.awt.Window.getToolkit() (/usr/lib64/libgcj.so.6.0.0)
at java.awt.Frame.addNotify() (/usr/lib64/libgcj.so.6.0.0)
at java.awt.Window.show() (/usr/lib64/libgcj.so.6.0.0)
at HelloAWT.main(java.lang.String[]) (Unknown Source)
at .main (/usr/lib64/libgij.so.6.0.0)
at .__libc_start_main (/lib64/libc-2.3.5.so)
Caused by: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkToolkit
not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/home/da/],
parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(java.lang.String)
(/usr/lib64/libgcj.so.6.0.0)
at java.lang.ClassLoader.loadClass(java.lang.String, boolean)
(/usr/lib64/libgcj.so.6.0.0)
at java.lang.ClassLoader.loadClass(java.lang.String) (/usr/lib64/libgcj.so.6.0.0)
at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader)
(/usr/lib64/libgcj.so.6.0.0)
at java.awt.Toolkit.getDefaultToolkit() (/usr/lib64/libgcj.so.6.0.0)
...6 more
[user@computer ~]$ export LD_LIBRARY_PATH=/usr/lib/gcc//x86_64-redhat-linux/4.0.0
[user@computer ~]$ java -cp `pwd` HelloAWT
(success...)
Can you post e.g. strace output? I'm not alone who can't reproduce this problem. Created attachment 113885 [details]
Output from strace -f -v -o java.output java --cp $(pwd) HelloAWT
Okay, attached is output from:
$ strace -f -v -o java.output java --cp $(pwd) HelloAWT
FWIW I just deleted the entire partition and installed FC4test3: [da@testsys ~]$ rpm -q gcc libgcj java-1.4.2-gcj-compat gcc-4.0.0-2 libgcj-4.0.0-2 libgcj-4.0.0-2 java-1.4.2-gcj-compat-1.4.2.0-40jpp_18rh and I _still_ get the same problem. Would you like an strace of that, too? I think libgcj is looking in /usr/lib for lib-gnu-java-awt-peer-gtk.so, when it should be looking in /usr/lib64. Jakub, this should be fixable in the libgcj RPM, right? I'm seeing this type of problem with fc4t3 + may 23 updates.
neuromancer> java -jar bin/rmmlite.jar
Exception in thread "main" java.awt.AWTError: Cannot load AWT toolkit:
gnu.java.awt.peer.gtk.GtkToolkit
at java.awt.Toolkit.getDefaultToolkit() (/usr/lib64/libgcj.so.6.0.0)
at java.awt.EventQueue.invokeLater(java.lang.Runnable)
(/usr/lib64/libgcj.so.6.0.0)
at javax.swing.SwingUtilities.invokeLater(java.lang.Runnable)
(/usr/lib64/libgcj.so.6.0.0)
at javax.swing.RepaintManager.addInvalidComponent(javax.swing.JComponent)
(/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JComponent.revalidate() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JComponent.setOpaque(boolean) (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JPanel.JPanel(java.awt.LayoutManager, boolean)
(/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JRootPane.createGlassPane() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JRootPane.getGlassPane() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JRootPane.JRootPane() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JFrame.createRootPane() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JFrame.getRootPane() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JFrame.frameInit() (/usr/lib64/libgcj.so.6.0.0)
at javax.swing.JFrame.JFrame(java.lang.String) (/usr/lib64/libgcj.so.6.0.0)
at com.rio.rmmlite.ChooseRmmlOrTaxi.main(java.lang.String[]) (Unknown Source)
at .main (/usr/lib64/libgij.so.6.0.0)
at .__libc_start_main (/lib64/libc-2.3.5.so)
Caused by: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkToolkit
not found in
gnu.gcj.runtime.SystemClassLoader{urls=[file:bin/rmmlite.jar,file:./],
parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(java.lang.String)
(/usr/lib64/libgcj.so.6.0.0)
at java.lang.ClassLoader.loadClass(java.lang.String, boolean)
(/usr/lib64/libgcj.so.6.0.0)
at java.lang.ClassLoader.loadClass(java.lang.String) (/usr/lib64/libgcj.so.6.0.0)
at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader)
(/usr/lib64/libgcj.so.6.0.0)
at java.awt.Toolkit.getDefaultToolkit() (/usr/lib64/libgcj.so.6.0.0)
...16 more
neuromancer>
I got the same error as you. But now I can compile and run java awt program after I ran this command: ln -s gcc/x86_64-redhat-linux/4.0.0/lib-gnu-java-awt-peer-gtk.so /usr/lib/ Will this could be a hint? os: fc4 x86-64 gcc(gcj): 4.0.0-8 I deleted FC4test3 and install FC4 as released, installed on a fresh partition.
I get the same problem,
$ rpm -q gcc libgcj java-1.4.2-gcj-compat
gcc-4.0.0-8
libgcj-4.0.0-8
libgcj-4.0.0-8
java-1.4.2-gcj-compat-1.4.2.0-40jpp_31rh
I did another strace -f, it appears to me that when it comes to opening
lib-gnu-java-awt-peer-gtk.so, it is looking in /usr/lib, and trying to load the
32-bit version, then failing. Successfully loaded libs are being looked for in
/usr/lib64... Here's an excerpt from the trace, if it helps:
6907 access("/usr/lib/lib-gnu-java-awt-peer-gtk.so.6", R_OK) = 0
6907 access("/usr/lib/lib-gnu-java-awt-peer-gtk.so.6", R_OK) = 0
6907 open("/usr/lib/lib-gnu-java-awt-peer-gtk.so.6", O_RDONLY) = 13
6907 read(13, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000y\3\000"...,
640) = 640
6907 close(13) = 0 6907
open("/lib/lib-gnu-java-awt-peer.la", O_RDONLY) = -1 ENOENT (No such file or
directory)
This seems to be where the trouble starts.
Should be fixed in libgcj-4.0.0-13 in rawhide. As a workaround, you can run the Java programs with LD_LIBRARY_PATH=/usr/lib64 *** Bug 163671 has been marked as a duplicate of this bug. *** |