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バイナリを配ってますな。コンパイルする方法を探ってみよう。