2006年3月份,netbeans.org发布了Mobility Pack 5.0 for CDC,这样使用Netbeans的开发者可以很容易地开发基于CDC的Java ME应用程序了,唯一要做的就是安装Mobility Pack 5.0 for CDC插件。本文介绍如何搭建CDC的开发环境,编写一个简单的入门程序。相比基于CLDC的Java ME开发,CDC的相关技术方兴未艾,还有待我们去挖掘和探索。
目前只有SonyEricsson和Nokia提供了对CDC开发的支持,SonyEricsson推出的SonyEricsson CDC扩展平台可以很好地与Netbeans集成到一起,并且SonyEricsson的M600和P990都支持CDC。本文以SonyEricsson CDC扩展平台为例搭建开发环境,另外Nokia 的S80同样提供了对CDC的支持。
首先我们需要安装以下软件:
1)J2SDK 1.4.2 or JDK 5.0
2)Netbeans IDE 5.0
3)Mobility Pack 5.0 for CDC
4)UIQ SDK 3.0 beta
5)SonyEricsson CDC扩展平台1.0 beta
6)SonyEricsson M600 CDC 扩展包
7)SonyEricsson P990 CDC 扩展包
这些软件在J2ME开发网的下载中心都能找到,请登录http://www.j2medev.com/soft/index.asp下载。
首先安装JDK,其次是Netbeans IDE 5.0,然后是Mobility Pack 5.0 for CDC和相关的扩展软件。然后我们需要把CDC平台集成到Netbeans之中,从菜单选择工具——Java 平台管理器,然后选择Java ME平台CDC模拟器,如下图所示:
然后找到UIQ SDK 3的安装目录,将其添加到Netbeans IDE中。
Mobility Pack 5.0 for CDC可以很好地支持CDC开发,包括:
- 支持CDC开发,包括SonyEricsson CDC扩展平台和Nokia S80平台
- 项目向导,一步步地指导你编写一个CDC项目
- 可视化UI设计器,继承自Matisse项目,允许使用拖拽的方式开发AWT的界面。
- 创建Symbian 程序安装包
- 提供了一个Symbian MBM编辑器
- 支持JUnit单元测试框架
下面通过一个范例说明如何使用Netbeans IDE开发CDC相关的项目。新建一个CDC项目,命名为cdcapp如下图所示:
由于我们让Netbeans自动创建Main类,所以新建项目完成后,在源文件中会出现cdcapp.Main。CDC的项目结构如下所示,与CLDC项目不同的是,项目结构增加了JUnit单元测试,我们可以在CDC的项目中编写单元测试程序。
相比MIDP,CDC的上层简表提供了AWT图形库(不包括Swing),因此我们可以开发出界面更加丰富的UI程序,Mobility Pack 5.0 for CDC整合了Matisse,可以借助它用拖拽的方式开发UI程序,这里我们不介绍详细的细节。使用UI设计器可以很快生成一个UI程序,代码如下所示:
/*
* Main.java
*
* Created on 2006年4月19日, 下午3:08
*/
package cdcapp;
/**
*
* @author ming
*/
public class Main extends java.awt.Frame {
/** Creates new form Main */
public Main() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
//
//GEN-BEGIN:initComponents
private void initComponents() {
label1 = new java.awt.Label();
textField1 = new java.awt.TextField();
label2 = new java.awt.Label();
textField2 = new java.awt.TextField();
label3 = new java.awt.Label();
textArea1 = new java.awt.TextArea();
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
label1.setText("UserName");
label2.setText("password");
label3.setText("description");
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(org.jdesktop.layout.GroupLayout.LEADING, textArea1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
.add(org.jdesktop.layout.GroupLayout.LEADING, label2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, label1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, label3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.add(16, 16, 16)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(textField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(textField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 115, Short.MAX_VALUE))))
.addContainerGap(47, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(label1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(textField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(label2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(textField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(label3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(textArea1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 141, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(53, 53, 53))
);
pack();
}// //GEN-END:initComponents
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
System.exit(0);
}//GEN-LAST:event_exitForm
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private java.awt.Label label1;
private java.awt.Label label2;
private java.awt.Label label3;
private java.awt.TextArea textArea1;
private java.awt.TextField textField1;
private java.awt.TextField textField2;
// End of variables declaration//GEN-END:variables
}
以上代码均由Netbeans IDE自动生成。运行项目,可以看到如下的界面:
这样我们的第一个CDC程序已经成功了,Mobility Pack 5.0 for CDC还提供了很多功能,这里不一一介绍了。有兴趣可以登录netbeans.org了解更多内容。