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 扩展包
首先安装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了解更多内容。