booolee
me is me
发贴: 101
积分: 20
|
于 2005-01-14 18:11
在模拟器上运行OK,但传到T628上就出现错误
代码如下,兄弟们帮我看看: -------------------------------------------------
/* * Created on 2005-1-13 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package com.booolee;
import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*; import java.io.*; import java.util.Calendar; import java.util.Date;
/** * @author libo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MainMIDlet extends MIDlet implements CommandListener,ItemStateListener{ private static final int ERROR=0; private static final int INFO=1; private Display display; private Command cmdSelect,cmdExit,cmdBack,cmdTest,cmdAgain; private List mainScr; private Form aboutScr,TestScr,ResultScr; private Alert alert; private DateField df_pTime; //上次时间 private TextField tf_Num; //时间周期 private ChoiceGroup cg_option; //结果输出设置 private String[] mainmenu={"开始预测","关于","退出"};
/** * */ public MainMIDlet() { //super(); // TODO Auto-generated constructor stub display=Display.getDisplay(this); cmdSelect=new Command("选择",Command.OK,1); cmdBack=new Command("返回",Command.OK,1); cmdTest=new Command("测算",Command.OK,1); cmdAgain=new Command("继续",Command.OK,1); alert=new Alert("","",null,AlertType.INFO); alert.setTimeout(2000); }
/* (non-Javadoc) * @see javax.microedition.midlet.MIDlet#startApp() */ protected void startApp() throws MIDletStateChangeException { // TODO Auto-generated method stub genMainScr(); } /** *创建主屏 */ private Screen genMainScr(){ if (mainScr==null){ mainScr=new List("保安犬小Q",List.IMPLICIT,mainmenu,null); mainScr.setCommandListener(this); } display.setCurrent(mainScr); return mainScr; }
/** * 创建关于对话框 * @return * @throws IOException */ private Screen genAboutScr() throws IOException{ if (aboutScr==null){ aboutScr=new Form("关于"); Image img=Image.createImage("/img/about.png"); ImageItem ii; ii=new ImageItem("",img,ImageItem.LAYOUT_CENTER,"BOBO 荣誉出品"); aboutScr.append(ii); aboutScr.append("\n名称:保安犬小Q \n作者:booolee\nQQ:25737305\n功能:测试女性安全期,为一切突发事件作准备"); aboutScr.addCommand(cmdBack); aboutScr.setCommandListener(this); } display.setCurrent(aboutScr); return aboutScr; }
/** * 创建测算日期输入框 * @return */ private Screen genTestSrc(){ if(TestScr==null){ TestScr=new Form("保安犬小Q"); df_pTime=new DateField("上次月经时间:",DateField.DATE); TestScr.append(df_pTime); tf_Num=new TextField("月经周期:","28",2,TextField.NUMERIC); TestScr.append(tf_Num); cg_option=new ChoiceGroup("测算类型:",ChoiceGroup.EXCLUSIVE); cg_option.append("下次月经日期",null); cg_option.append("下次安全期",null); TestScr.append(cg_option); TestScr.addCommand(cmdTest); TestScr.setCommandListener(this); } display.setCurrent(TestScr); return TestScr; } /** * @param type 包括2个值ERROR和INFO * @param msg 要显示的信息 * @param s 提示后要返回的屏 */ private void displayAlert(int type,String msg,Screen s){ alert.setString(msg); switch(type){ case ERROR: alert.setTitle("错误"); alert.setType(AlertType.ERROR); break; case INFO: alert.setTitle("提示"); alert.setType(AlertType.INFO); break; } display.setCurrent(alert,s==null?display.getCurrent():s); } /** * 退出应用 */ private void MIDletExit(){ try{ destroyApp(false); notifyDestroyed(); }catch(Exception e){ } }
/* (non-Javadoc) * @see javax.microedition.midlet.MIDlet#pauseApp() */ protected void pauseApp() { // TODO Auto-generated method stub
}
/* (non-Javadoc) * @see javax.microedition.midlet.MIDlet#destroyApp(boolean) */ protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub
}
public void commandAction(Command c,Displayable d){ if (d==mainScr){ if (c==List.SELECT_COMMAND){ switch (mainScr.getSelectedIndex()){ case 0: //开始预测 genTestSrc(); break; case 1: //关于 try{ genAboutScr(); }catch(Exception e){} break; case 2: //退出 MIDletExit(); break; default: displayAlert(ERROR,"未知的命令错误,请和作者联系!",mainScr); } } }else if(d==aboutScr){ if(c==cmdBack){ //返回主选单 genMainScr(); } }else if(d==TestScr){ if (c==cmdTest){ //测算结果屏 genResultScr(); } }else if(d==ResultScr){ if(c==cmdAgain){ //从结果屏返回 genMainScr(); } } } /** *返回结果 */ private void genResultScr(){ String info; Calendar cal; Date r; r=Dateadd(df_pTime.getDate(),Integer.parseInt( tf_Num.getString()));
info="下次月经时间为:\n"+dateTostr(r);
ResultScr=new Form("测算结果"); ResultScr.append(info); ResultScr.addCommand(cmdAgain); ResultScr.setCommandListener(this); Display.getDisplay(this).setCurrent(ResultScr); } public void itemStateChanged(Item item){
} private Date Dateadd(Date d,int days){ int Year,Month,Month2,Month_r,Day,Day2,Day_r,i; boolean rYear; int DayOfMonths[]={31,28,31,30,31,30,31,31,30,31,30,31}; Calendar cal; //传到手T628上后,下面这句会导致程序崩溃 cal=Calendar.getInstance(); cal.setTime; Year=cal.get(Calendar.YEAR); Month=cal.get(Calendar.MONTH); Day=cal.get(Calendar.DAY_OF_MONTH); Day2=Day+days; //判断是否为闰年 if (( Year % 4 == 0 && Year % 100 != 0)||Year % 400 == 0) { rYear=true; }else{ rYear=false; } //如果是闰年,2月份就是29天否则是28天 if (rYear){ DayOfMonths[1]=29; }else{ DayOfMonths[1]=28; } //跨度为几个月,请求出结果月 i=0; while (true){ if ((Month+i)>11){ Month=1; i=0; Year++; } Day_r=Day2; Day2=Day2-DayOfMonths[Month+i]; if (Day2<0){ Month_r=Month+i+1; break; }else{ i++; } } cal.set(cal.YEAR,Year); cal.set(cal.MONTH,Month_r); cal.set(cal.DAY_OF_MONTH,Day_r); return cal.getTime(); }
/** * 将日期型转换为字符串 * @param dateVal * @return */ private String dateTostr(Date dateVal)
{ Calendar calendar = Calendar.getInstance(); //传到手T628上后,下面这句会导致程序崩溃 calendar.setTime(dateVal);
String strDate = Integer.toString (calendar.get(calendar.DAY_OF_MONTH));
String strMonth = Integer.toString (calendar.get(calendar.MONTH)+1); String strYear = Integer.toString (calendar.get(calendar.YEAR));
return strYear + "年" + strMonth + "月" + strDate + "日";
}
}
|