程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 初學J2ME的一點經驗

初學J2ME的一點經驗

編輯:J2ME
  與其說是學J2ME的經驗,倒不如說是類C++語言的一點留心事項,之所以這麼說,是由於這個標題是在學J2ME時候發明的,整整折騰了我一天,固然只是一點小的失誤,但是直接成果是程序不斷異常,所以我把它寫出來,一方面提示自己,學知識不能淺嘗辄止,而應當多問為什麼,不僅知其然還要知所以然,另一方面也告訴更多像我這樣初學的朋友不要犯雷同的錯誤。

下面請看一段代碼:

/* * ImageItemDemo.Java * * Created on 2005年7月24日, 下午1:45 */ import Javax.microedition
, "第一張圖片"); img2 = new ImageItem("默認圖像控件", Image.createImage("/Image.png"), Item.LAYOUT_2 | Item.LAYOUT_EXPAND | Item.LAYOUT_NEWLINE_BEFORE, "第二張圖片"); } catch (Exception err) { System.out.println("can not load...."); }  mainform.append(img1); mainform.append(img2); Display.getDisplay(this).setCurrent(mainform); }  public void pauseApp() { }  public void destroyApp(boolean unconditional) { }  public void commandAction(Command c, Displayable d) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } }}

這是一個ImageItemt的演示程序,我在實現的條件下加了一點東西導致它異常,異常如下:

startApp threw an Exception
Java.lang.NullPointerExceptionJava.lang.NullPointerException at ImageItemDemo.startApp(+64) at Javax.microedition.midlet.MIDletProxy.startApp(+7) at com.sun.midp.midlet.Scheduler.schedule(+270) at com.sun.midp.main.Main.runLocalClass(+28) at com.sun.midp.main.Main.main(+116)

能找到異常原因嗎?

首先斷定是由startApp拋出空指針異常,其中用到的對象重要有兩個,mainform和img1、img2,然而image載進拋出的應當可由catch(Exception err)捕捉到,所以基礎可以斷定是mainform產生的異常,可是標題來了,mainform我已經在結構函數裡面實例化了,而且也是類的成員變量,應當隨對象存在,可是為什麼會異常呢?

百思不得其解。。。。

於是把ImageItemDemo()裡的代碼移到startApp()裡面,發明居然實現了,可以斷定,就是沒有實例化mainform。原因何在?難道是J2ME要先履行startApp才履行結構函數??答案是否定的。startApp()只是程序運行的切進點,對象和類的結構依然還是由結構函數完成。一個提示,那真的是結構函數嗎?

一個很明顯但是很輕易被疏忽的錯誤, public void ImageItemDemo(),它不是結構函數,甚至連結構函數的重載都不是,理由?限制了void類型。c++學了快1年了,確實沒有想過也沒有留心過這個標題,直接成果就是這樣,類在結構時候不會履行它,那麼其中的mainform自然不會被實例化,而依然只是一個引用,何以談的上把持?

改的方法很輕易,把void往掉就可以了,就這麼一個簡略的標題,耗了我一天,最大的感到就是自己學的不夠深,對理論觀點依舊不夠明白,所以寫下它引認為戒。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved