论坛首页 Java企业应用论坛

Windows 上使用 GCJ+SWT 开发 native GUI 应用

浏览 53275 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-04-03  
最好的JVM和Native 编译器,都属于TowerJ公司。这个公司专门从事Java优化,可惜他们的产品好贵。Java优化有好多有趣的东西,有时间发出来。
0 请登录后投票
   发表时间:2004-04-03  
呵呵。昨晚忘了说,GCJ 有一个问题是它是完全用 GPL 发布的(包括编译器、Java 运行环境和 Java 核心类库)。众所周知 GPL 有一种传染性,如果你用 GCJ 编译程序,无论与 Java 核心类库做静态编译还是动态编译,你都需要公布你的源代码。这就限制了 GCJ 的商业用途,使得它不适合开发大型的复杂商业应用(不是技术上的问题,只是心理上的问题)。不过如果出于学习和开发开源软件的目的,玩玩 GCJ 还是很不错的,至少可以使你以另外的一种角度来理解 Java。
希望 GCJ 中的 Java 核心类库将来能以 LGPL 一类的版本发布,这样它就能用于更广泛的用途了。
0 请登录后投票
   发表时间:2004-04-03  
我认为java程序的本地编译是反潮流的做法,没有前途的,只在特定的场合有特定的用途而已。现在Windows也走向虚拟机运行化了,Longhorn之后,Windows整个应用程序框架就完全dotnet了,java现在走本地编译没有意思的。
0 请登录后投票
   发表时间:2004-04-03  
呵呵,不必这么严肃,只是玩玩而已。确实是这样,Python 早就可以跑在虚拟机上了(Jython),Perl 好象也计划开发自己的虚拟机(不是跑在 JVM 上,而是有他们自己的虚拟机)。

没有这些开源软件,世界真的是蛮无趣的。
0 请登录后投票
   发表时间:2004-04-03  
python有自己的虚拟机,而且可以编译。所以jython不是唯一的选择。
其实我觉得关键还是虚拟机的效能要有大的提高,而且这个也是肯定可以有很多的可以发挥的余地的。
其实虚拟机要是早成熟,现在也不会有什么cpp了。
0 请登录后投票
   发表时间:2004-04-03  
ozzzzzz 写道
python有自己的虚拟机,而且可以编译。所以jython不是唯一的选择。
其实我觉得关键还是虚拟机的效能要有大的提高,而且这个也是肯定可以有很多的可以发挥的余地的。
其实虚拟机要是早成熟,现在也不会有什么cpp了。

虚拟机的效能提高非常有限。本地化或者部分本地化是解释性语言的唯一出路。
0 请登录后投票
   发表时间:2004-04-03  
“虚拟机的效能提高非常有限。本地化或者部分本地化是解释性语言的唯一出路。”
这句话好像是70代年有人评论smalltalk的时候说的,后面不过还有一句似乎是在可以设想的为了以虚拟机为基础的语言没有可能用于商业使用。嘿嘿。
0 请登录后投票
   发表时间:2004-04-03  
ozzzzzz 写道
“虚拟机的效能提高非常有限。本地化或者部分本地化是解释性语言的唯一出路。”
这句话好像是70代年有人评论smalltalk的时候说的,后面不过还有一句似乎是在可以设想的为了以虚拟机为基础的语言没有可能用于商业使用。嘿嘿。


这是用脚后跟都能想清楚的事情。
0 请登录后投票
   发表时间:2004-04-03  
那为什么dotnet和java会出现呢?并且成为现在开发的主流语意。
0 请登录后投票
   发表时间:2004-04-03  
上传一个 Ant 脚本,用来编译 EclipseLauncher 这个例子。copy 到 EclipseLauncher 目录下。

编译前的准备工作:

D:\thisiscool-gcc\gcc-3.4\bin
D:\thisiscool-gcc\gcc-3.4\i686-pc-mingw32\lib
两个目录加入 PATH 环境变量。这里 D:\thisiscool-gcc 要换成实际的安装目录。

先执行:
gcj-lib guidll

编译:ant
清除:ant clean
运行:run

看到弹出的窗口就 ok了,这是一个用 gcj 编译的 Swing 程序。
可以把那个又老又丑的 make 扔到太平洋里了。

build.xml
<?xml version="1.0"  encoding="gbk"?>
<project name="build" default="native-compile">
   <property name="classname" value="EclipseLauncher"/>

   <target name="resource-compile">
      <apply executable="gcj" dest="." parallel="true" failonerror="true">
         <arg value="-c"/>
         <arg value="-o"/>
         <targetfile/>
         <arg line="--resource=${classname}.jpg"/>
         <srcfile/>
         <fileset dir="." includes="${classname}.jpg"/>
         <mapper type="glob" from="${classname}.jpg" to="icon.o"/>
      </apply>
   </target>

   <target name="native-compile" depends="resource-compile">
      <apply executable="gcj" dest="." parallel="true" failonerror="true">
         <arg value="-s"/>
         <arg value="-fjni"/>
         <arg line="--main=com.thisiscool.util.eclipselauncher.swing.EclipseLauncher"/>
         <arg value="-mwindows"/>
         <arg value="-o"/>
         <targetfile/>
         <srcfile/>
         <fileset dir="." includes="*.java"/>
         <arg line="icon.o"/>
         <mapper type="merge" from="*.java" to="${classname}.exe"/>
      </apply>
   </target>

   <target name="clean">
      <delete>
         <fileset dir="." includes="*.o, ${classname}.exe"/>
      </delete>
   </target>
</project>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics