RopenYuan 2009-06-12
遗憾得很,按照Sun对待Desktop产品的作风,和JavaFX一样,姗姗来迟的Sun Java Toolkits for CDC只有Windows的版本。
看来这个Sun的这个Mobile/Embedded部门对待自家的Solaris也不见的有多友好…所以我们用Linux的同学也沾不到什么光。
不过还好了,PhoneME这个项目的存在真是让人倍感欣慰。于是偶这个用Gentoo的同学才有了在Linux上开发CDC程序的可能性。
在这里已经有前辈做了相关的工作(需翻墙,不是故意要屏蔽小白的):
如果懒得翻墙可以听我简单的说下。
phoneME有两个开发版,一个是for CLDC的PhoneME Feature,一个是for CDC的PhoneME Advanced。
那么我需要下载支持CDC的PhoneMe Advanced for Linux的Milestone Releases。如果需要GUI (AWT only),请下载具备 Persoanl Profile(PP)支持MR1版本,否则就是MR2版本,它不支持PP,只支持Personal Basic Profile。
PhoneMe Advanced Mr2 可以在下载页下载:https://phoneme.dev.java.net/downloads_page.html#advanced
PhoneMe Advanced Mr1 可以在陈旧的下载页下载:https://phoneme.dev.java.net/downloads_previous.html#advanced
然后解压就好。如果是Mr1,选择里面那个pp结尾的目录,里面就是phoneME的runtime。而bin目录下的cvm则是JavaME 虚拟机。
测试一下:
[shellex@gentoo:bin]$ ./cvm -version
Product: CDC AMS 1.0 for PP (b31)
Profile: Personal Profile Specification 1.1
JVM: CDC 1.1.1_01 (interpreter loop)
很好很强大。
写一个巨呆B的Hello World。我还要图形的。很简单的,就俩按钮,一个用来正日,一个用来日成。代码和运行结果如下
package org.demo;
import java.awt.*;
import java.awt.event.*;
public class Test extends Frame {
Button fuck_me ;
Button fuck_off ;
public static void main(String args[]) {
Test f = new Test("WTF?");
f.launch();
}
public Test(String str) {
super(str);
}
public void launch() {
this.setSize(300, 100);
this.setLayout(new FlowLayout());
fuck_me = new Button("Fuck Me!");
fuck_off = new Button("Fuck Off!");
// register new Actions Listener
fuck_me.addActionListener(this.new FuckMeHandler());
fuck_off.addActionListener(this.new FuckOffHandler());
this.addWindowListener(this.new FrameHandler());
fuck_me.setActionCommand("You");
this.add(fuck_me);
this.add(fuck_off);
this.setVisible(true);
}
class FuckMeHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Fuck " + e.getActionCommand() + "!");
}
}
class FuckOffHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
class FrameHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
真丑哈,这UI。
如果你像我一样使用较新的Java SDK(比如Sun-Java-SDK-6),那么编译的时候不要忘了给javac指定 -source 参数和 -target 参数以保证class文件和源文件的版本兼容性(如图)。都设置为1.4以下的版本即可。
由于PhoneME使用的Awt对于Linux绑定的Native GUI component是QT,所以可能出现一些问题。
如果运行时出现libqtawt.so相关的连接错误,请用
ldd [phoneME Home]/lib/libqtawt.so
检查它的依赖情况。然后根据输出补全对应的缺少的动态链接库文件即可。比如的gentoo,对QT无爱,可不想编译几十Mb去搞一个Java Awt的QT bind,所以就根据需要去我的Ubuntu下copy了缺少的两个库文件到phoneME的lib目录下。
如果你用Ubuntu开发估计不会出现这种情况。
===========Eclipse 的伟岸分割线 =======================
好了。没有IDE,做Java工程可以说相当的痛苦(shellex不会ant)。
哦…看到Eclipse这伟岸的Logo,我的小心肝禁不住扑嗵扑嗵地跳了起来…好了,现在让我们为Eclipse加入PhoneME支持。
需要下载的东东是mToolkit,官网(http://dz.prosyst.com)
下载其中的ProSyst mToolket Basic Edition的GUI setup tool。其实就丫是一Eclipse插件,让Eclipse能使用丫的phoneME JRE,安装即可。
然后在Eclipse的Preferences->Java->Installed JERs里面添加新的运行环境。选择CVM VM,指定你的phoneME安装路径即可。
也别忘了在Eclipse的Project->Propertes里面设置Java Compiler的JDK compliance里设置兼容性。
好了,现在建立Java工程时可选这个JER了。可以开始写CDC程序了。如果还出现问题,不妨写一个启动脚本,临时添加一些环境变量:
#! /bin/sh
cd ~/Programs/eclipse
# setting for PhoneME.
export PHONEME_HOME=/home/shellex/Programs/phoneme/phoneme_advanced-mr1-pp/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PHONEME_HOME/lib
export PATH=$PATH:$PHONEME_HOME/bin
export PATH=$PATH:/usr/lib/jvm/java-6-sun/bin
./eclipse
本文来自http://www.sxnsx.com/develop-javame-cdc-with-phoneme-in-linux/