toge's diary

コンピュータ関連の趣味をつらつらと。

java-gui-branch

日曜日なので遊び、遊び。gcj 3.5の週間snapshot(2004/05/23)を使ってawt/swingを動かしてみよう!

記憶が曖昧だが、Redhatが中心になって開発しているgcjのbranch、java-gui-branchからmainへのmarge patchが投稿されていた(http://gcc.gnu.org/ml/java-patches/2004-q2/msg00495.html)ので、使ってみました。

cd gcc-3.5-20040523
patch -p0 < /home/toge/down/java-gui-merge-may-26-2004.patch 
cd libjava/
patch -p0 < /home/toge/down/java-gui-merge-may-27-2004.patch 
cd ..
./configure --enable-languages=c,c++,java --program-suffix=-3.5.0 --enable-java-awt=xlib --enable-libgcj
make
make install

で、試したのは以下の超簡単AWTコード。

import java.awt.*;
 
public class AWTSample
  extends Frame
{
  public
  static void main(String[] args)
  {
    Frame frame = new AWTSample();
    frame.setSize(200, 220);
    frame.setTitle("AWT Sample");
    frame.setVisible(true);
  }
    
  public
  AWTSample()
  {
  }
    
  public
  void paint(Graphics g)
  {
    g.setColor(Color.red);
    g.drawOval( 10,  30, 80, 80);
    g.drawRect(100,  30, 80, 80);
    g.fillOval( 10, 120, 80, 80);
    g.fillRect(100, 120, 80, 80);
  }
}

コンパイルは通るもまだ動作しない模様。表示までは出来るんだけどね。

 Exception in thread "main" java.lang.UnsupportedOperationException: not implemented yet
   at gnu.awt.xlib.XFramePeer.toFront() (/usr/local/lib/lib-gnu-awt-xlib.so.6.0.0)
   at java.awt.Window.toFront() (/usr/local/lib/libgcj.so.6.0.0)
   at java.awt.Window.show() (/usr/local/lib/libgcj.so.6.0.0)
   at java.awt.Component.show(boolean) (/usr/local/lib/libgcj.so.6.0.0)
   at java.awt.Component.setVisible(boolean) (/usr/local/lib/libgcj.so.6.0.0)
   at AWTSample.main(java.lang.String[]) (Unknown Source)
X connection to :0.0 broken (explicit kill or server shutdown).

やっぱりGCC/GCJ for MingW(http://www.thisiscool.com/gcc_mingw.htm)でやっているようにSWT, SwingWTでAWTを実現するのが現実解なのかも。ただしあっちもまだちゃんとは動かないみたいだが。
そういえばこのサイトはSWT3.0のgcjバイナリを配ってますな。コンパイルする方法を探ってみよう。