在Linux下进行JavaME CDC开发


遗憾得很,按照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/

相关内容