前陣子因為購入 Nokia 的 6108 之後才開始對這部份的領域有些了解,經過一陣時間的學習,發現其實這是蠻令人興奮的主題,想像一下您可以寫程式然後放在自己手機裡頭執行
本篇文章將會介紹如何在 Debian unstable 底下透過由 IBM 釋出的 Eclipse IDE 整合式開發環境結合 EclipseME 這個 Eclipse Plugin 及昇陽公司提供的 WTK (Wireless Tool Kits) 等工具來開發 J2ME 的程式,文中除了會教導大家如何安裝及設定相關軟體,還會舉一個 "Hello J2ME" 的小程式為例子作為展示。
1.增加 apt 站台到您的 /etc/apt/sources.list 之中:
- 代碼: 選擇全部
deb http://ftp.tux.org/pub/java/debian unstable main non-free
ps.請記得下 apt-get update 更新軟體資料庫。
2.安裝 java runtime environment package j2re1.4 與 j2sdk1.4 及設定:
由於該 j2re1.4 package 包裝有些問題,在安裝過程中您可能會出現類似底下的錯誤訊息:
- 代碼: 選擇全部
update-alternatives: unable to make /usr/lib/mozilla-cvs/plugins/javaplugin_oji.so.dpkg-tmp a symlink to /etc/alternatives/javaplugin_oji-mozilla-cvs.so: 沒有此一檔案或目錄
dpkg: error processing j2re1.4 (--configure):
subprocess post-installation script returned error exit status 2
建議您可以先用底下的方式規避:
- 代碼: 選擇全部
# mkdir /usr/lib/mozilla-cvs
# mkdir /usr/lib/mozilla-cvs/plugins
# touch /usr/lib/mozilla-cvs/plugins/javaplugin_oji.so.dpkg-tmp
再開始安裝 j2re1.4
- 代碼: 選擇全部
apt-get install j2re1.4 j2sdk1.4
3.加入 font.properties.zh_TW 支援繁體中文:
我的 font.properties.zh_TW 內容:
- 代碼: 選擇全部
# Serif font definition
#
serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
serif.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
serif.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
serif.italic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
serif.italic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1
serif.bold.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
serif.bold.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1
serif.bolditalic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
serif.bolditalic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# SansSerif font definition
#
sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
sansserif.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.italic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
sansserif.italic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.bold.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
sansserif.bold.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.bolditalic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
sansserif.bolditalic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# Monospaced font definition
#
monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
monospaced.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.italic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
monospaced.italic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.bold.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
monospaced.bold.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.bolditalic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
monospaced.bolditalic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# Dialog font definition
#
dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialog.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.italic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialog.italic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.bold.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialog.bold.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.bolditalic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialog.bolditalic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# DialogInput font definition
#
dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialoginput.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.italic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialoginput.italic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.bold.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialoginput.bold.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.bolditalic.1=-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0
dialoginput.bolditalic.2=-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# Default font definition
#
default.char=274f
fontcharset.serif.0=sun.io.CharToByteISO8859_1
fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK
fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK
fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK
fontcharset.dialog.0=sun.io.CharToByteISO8859_1
fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK
fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK
# exclusion info.
#
fontset.serif.plain=\
-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.serif.italic=\
-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.serif.bold=\
-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.serif.bolditalic=\
-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# SansSerif font definition
#
fontset.sansserif.plain=\
-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.sansserif.italic=\
-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.sansserif.bold=\
-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.sansserif.bolditalic=\
-b&h-lucida-bold-i-normal-snas-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# Monospaced font definition
#
fontset.monospaced.plain=\
-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.monospaced.italic=\
-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.monospaced.bold=\
-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-,1\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.monospaced.bolditalic=\
-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# Dialog font definition
#
fontset.dialog.italic=\
-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.dialog.bold=\
-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.dialog.bolditalic=\
-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.dialog.plain=\
-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
# DialogInput font definition
#
fontset.dialoginput.italic=\
-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.dialoginput.bold=\
-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.dialoginput.bolditalic=\
-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
fontset.dialoginput.plain=\
-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
#
fontset.default=\
-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0,\
-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-big5-0
filename.-dynalab-mingliu-medium-r-normal--*-%d-*-*-c-*-big5-0=/usr/share/fonts/truetype/dynalab/mingliu.ttf
filename.-arphic-ar pl kaitim big5-medium-r-normal--*-%d-*-*-c-0-iso10646-1=/usr/share/fonts/truetype/arphic/bsmi00lp.ttf
您可以將以上的內容存成 font.properties.zh_TW ,並將此檔案 copy 至 /etc/j2se/1.4 底下:
- 代碼: 選擇全部
cp font.properties.zh_TW /etc/j2se/1.4
到 j2re 中做一個符號連結:
- 代碼: 選擇全部
cd /usr/lib/j2se/1.4/jre/lib/ ; ln -s /etc/j2se/1.4/font.properties.zh_TW .
ps.font.properties.zh_TW 設定因系統而異,請依照您系統上的狀況作適度的調整。
4.下載及安裝 Eclipse 3.x :
由於 eclipseME 這個 eclipse Plugins 只能在 eclipse3.x 版本以上運作,所以我們直接到 http://www.eclipse.org 下載:
下載 Eclipse 3.0
這個檔案有 80 多 mb ,請耐心下載。下載完後直接解開 eclipse-SDK-3.0-linux-gtk.zip 即可,底下以安裝到 /usr/local 為例:
- 代碼: 選擇全部
cd /usr/local ; unzip /tmp/eclipse-SDK-3.0-linux-gtk.zip
4.下載並安裝昇陽公司的 WTK for linux :
請至 http://java.sun.com/products/j2mewtoolk ... d-2_1.html 下載取得。
ps1.需註冊帳號才能下載,別擔心您可以免費註冊帳號。;-)
ps2.該檔案約 13 MB 多,請耐心下載
下載完畢後開始安裝:
- 代碼: 選擇全部
chmod +x j2me_wireless_toolkit-2_1-linux-i386.bin
./j2me_wireless_toolkit-2_1-linux-i386.bin
首先出現 license 聲明畫面,鍵入 yes ,接下來 WTK 會測試系統上的 java 環境:
- 代碼: 選擇全部
nsors. Except as specifically authorized in any Supplemental License Terms, you
Do you agree to the above license terms? [yes or no] yes
Testing /usr/bin/java...
Testing /usr/bin/jre...
Class not found: com.sun.kvem.environment.JavaVersionTester
A suitable Java interpreter was detected
0) Use /usr/bin/
1) Specify a path to a Java interpreter directory.
2) Cancel this installation.
Select a choice [0-2]:
請選擇 1 然後指定 java path:
- 代碼: 選擇全部
/usr/lib/j2se/1.4/bin
成功畫面:
- 代碼: 選擇全部
This application requires Java 2 SDK, Standard Edition (1.4 or later). Enter a path to a Java 2 SDK (For example: /user/jdk1.4/bin). You can type "exit" to cancel installation.
Enter a path to the Java 2 SDK: /usr/lib/j2se/1.4/bin
Testing /usr/lib/j2se/1.4/bin/java...
Please enter a directory into which you would like to install the J2me Wireless Toolkit, 2.1.
[ default is /root/java/WTK2.1 ]:
繼續輸入 WTK 安裝 path , 以安裝到 /usr/local 為例:
- 代碼: 選擇全部
/usr/local/WTK2.1
接下來會出現安裝確認畫面:
- 代碼: 選擇全部
[ default is /root/java/WTK2.1 ]:/usr/local/WTK2.1
Installation directory is /usr/local/WTK2.1.
Setup has enough information to start copying the program files.
Current Settings:
Destination Directory
/usr/local/WTK2.1/
JVM Folder
/usr/lib/j2se/1.4/jre/bin/
Please choose one of the following options:
0) Begin copying files if you are satisfied with the settings .
1) Cancel the installation.
Select a choice [0-1]:
鍵入 0 開始安裝 WTK,安裝成功後會出現如下訊息:
- 代碼: 選擇全部
Select a choice [0-1]: 0
Checksumming...
Extracting the installation files...
Documentation for the J2ME Wireless Toolkit version 2.1 is in the file
/usr/local/WTK2.1/index.html
In order to start using the J2ME Wireless Toolkit, please run
/usr/local/WTK2.1/bin/ktoolbar
5.下載 eclipseME Plugins 及安裝:
下載位置:
http://prdownloads.sourceforge.net/ecli ... p?download
下載回來請解壓縮到到 eclipse 下的 plugins 目錄:
- 代碼: 選擇全部
cd /usr/local/eclipse/plugins ; unzip /tmp/eclipseme-0.4.5.zip
6.執行 eclipse 及設定:
- 代碼: 選擇全部
/usr/local/eclipse/eclipse
到 eclipse 主畫面中,選擇下拉選單 File -> Import
產生 jar 及 jad 檔案:
一切順利的話可以在 project 目錄下找到這隻程式最後打包好的 jar 及 jad 檔案:
- 代碼: 選擇全部
debian:~# ls /root/workspace/Hello\ J2ME/deployed/
Hello_J2ME.jad Hello_J2ME.jar
剩下的就依照您手機或 PDA 公司提供的軟體透過紅外線或是傳輸線將製作好的 jar 下載到實機上去測試囉 ..
Enjoy ..
ps.辛苦 jack 讓我放圖片的 server 了...