Norman Hendrich
Mon Aug 16 15:39:00 GMT 2004


this is the third attempt to get my mail through your spamfilter...


I just managed to get jfig running under GCJ 3.5!  (The AWT version,
that is; I guess I will try Swing again after the next GUI-branch merge):

BTW, this is the "gcj (GCC) 3.5.0 20040704 (experimental)" snapshot with
the recent drawImage patch.

Status: Most things work, but there are a few issues:

* help menu missing

* annoying flicker for Canvas/Panel subclasses (see attached testcase);
  this also means the app is eating 100% cpu time... why does the event
  loop keeps calling paint() over and over again?
* CheckboxMenuItems don't work

* focus problems with nested dialogs (admittedly, the AWT had them, too).

* the buttons really should be transparent. This is either a problem with
  image loading or with Button not getting the dark gray background.
- Norman

import java.awt.*;

 * demonstrate Gcj/Gtk annoying flicker for Canvas/Panel 
public class GcjFlicker
       //extends Component
       //extends Panel
       extends Canvas
   String msg;
   Font   font = new Font( "Helvetica", Font.PLAIN, 12 );
   FontMetrics fm = null;
   int w, h, y;

   public GcjFlicker() {
     // getFontMetrics is deprecated, but we keep it for 1.1 compatibility
     fm = Toolkit.getDefaultToolkit().getFontMetrics( font );
     h = fm.getHeight();
     w = 600; // full width
     msg = "status messages will appear here";

    * directly set the new message, without touching the message stack
   public synchronized void setText( String msg ) {
      this.msg = msg;

   public void paint( Graphics g ) {
     //Thread.dumpStack(); // who keeps calling? the event loop :-(

      setBackground( Color.lightGray );
      g.clearRect( 0, 0, getBounds().width, getBounds().height );
      g.setColor( );
      int y = h + (getBounds().height - h)/2;
      g.setFont( font );
      g.drawString( msg, 10, y );

   public Dimension getPreferredSize() {
     int xsize = w;
     int ysize = 2*h;
     return new Dimension( xsize, ysize );

   public Dimension getMinimumSize() {
     return new Dimension( 100, 2*h );  

   public static void main( String argv[] ) {
     Frame frame = new Frame( "GCJ flickering demo" );

     GcjFlicker gf = new GcjFlicker();
     gf.setText( "flickering message" );
     frame.add( "North", gf );
     frame.add( "South", new Label( "Just a Label" ));


More information about the Java mailing list