<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    路是爬出來的

    #

    rcp實踐

          這篇文章基本上是沒怎么加我自己寫的代碼的,幾乎全部是eclipse生成的,本人只是拿這個例子來說說自己的認識,所以里面很多錯誤,看了就把它忘記吧。建議到網站找資料,我想更適合你。

    最近發現rcp的資料越來越多,而自己有處于比較有空的狀態,所想寫一篇完整的Rcp教程,由于我也是初學,所以寫出來的很多東西可能都是錯的,所以建議參考一些資料:


    http://www.eclipse.org/home/categories/rcp.php Eclipse Rcp的官方網站。


    http://www-128.ibm.com/developerworks/cn/opensource/top-projects/eclipse.html  IBM網站 Eclispe的幫助文檔。


    上面的文檔足以幫助我們這些初學者入門。


    <!--[if !supportEmptyParas]--> <!--[endif]-->


    下面我將以一篇管理用戶的例子來體驗RCP的美妙,此程序基于(jdk1.5+eclipse3.2)。


    一.創建序基本框架


    二.分析RCP的結構


    三.添加程序功能


    四.建立數據modeldaoserviceaction


    五.測試


    六.打包


    一.    序基本框架,我想Eclipse這點做的是很貼心的,在創建程序框架的時候選擇Email Template。并輸入項目名稱org.wuhua.rcp。然后點下一步就行了。這樣我們創建了帶菜單,工具條等基本模板。




    上面的模板我想基本上是適合我們的程序的,不過我們要改進下它們,比如菜單,工具條,跟左側樹狀菜單,這些是我們要改進的,我們要讓它們符合我們的需求。



    二.    哇,上面的框架好漂亮啊。Eclipse是怎么做出來的。程序是怎么啟動的?我怎么沒有找到main方法呢?java不是要求從main啟動的嗎?那些圖片,菜單,工具條,視圖是怎么構建的呢?跟Swing,awt有區別嗎?

    帶這這些問題我們來看看那些源代碼是怎么工作的?

    我們將三步來學習這些東西:

    1,    插件清單――plugin.xml,MANIFEST.MF(OSGI綁定),build.properties。

    2,    java代碼――Perspective,ActionBarAdvisor, WorkbenchAdvisor,Application


    <!--[if !supportLists]-->


    插件清單的學習:重點RCP程序也是一個插件,但跟插件又有點不同(它有自己獨立的工作臺,有自己獨立的透視圖,透視圖在程序啟動時候啟動(可以自己指定相關的透視圖實現)。要注意的是在相同的時間里只能存在一個透視圖),我認為普通插件是構建在Eclipse的工作臺之上的,說白了就是插件要依賴與Eclipse來工作,而RCP則可獨立運行――純粹個人觀點。


    在創建了插件項目之后,需要創建透視圖,創建透視圖是一個兩階段的過程。首先,修改插件的清單以包含新的擴展,該擴展將使用 org.eclipse.ui.perspectives 擴展點。其次,使用來自新擴展點的屬性創建一個透視圖類。根據關于擴展和擴展點的早期討論,AutoTest應用程序的插件清單已經包括下列擴展:


     


             point="org.eclipse.ui.perspectives">


         


                name="Autotest Perspective"


                class="org.wuhua.autotest.ui.Perspective"


                id="org.wuhua.autotest.perspective">


         


     




    元素具有下列屬性:



    • id —— 該屬性為透視圖定義了一個惟一標識符。

    • name —— 該屬性為透視圖定義了一個名稱,工作臺窗口菜單欄將使用它來表示該透視圖。

    • class —— 該屬性包含實現 org.eclipse.ui.IPerspectiveFactory 接口的類的完全限定名。



    上面是對透視圖插件清單的定義,現在我們看下,透視圖在java代碼中是怎么樣構建的,是怎么樣顯示到桌面?看看下面的代碼


    java 代碼


     


    1. public class Perspective implements IPerspectiveFactory {  

    2.     public void createInitialLayout(IPageLayout layout) {  

    3.     }  

    4. }  



    IperspectiveFactory指定一個創建透視圖接口,我們只需要實現它即可。程序會在啟動的時候加載這個類,具體是通過plugin.xml里面的擴展點:

    point="org.eclipse.ui.perspectives">――個人認為:我們可以把RCP啟動框架OSGI相當于Spring IOC容器,通過配置文件加載并管理各個方面的資源。


    <!--[if !supportEmptyParas]--> <!--[endif]-->


    具體創建透視圖的方法是:





    java 代碼


     


    1. public void createInitialLayout(IPageLayout layout) {  

    2.     String editorArea = layout.getEditorArea();  

    3.         layout.setEditorAreaVisible(false);  

    4.           

    5.         layout.addStandaloneView(NavigationView.ID,  false, IPageLayout.LEFT, 0.25f, editorArea);  

    6.         IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea);  

    7.         folder.addPlaceholder(View.ID + ":*");  

    8.         folder.addView(View.ID);  

    9.           

    10.         layout.getViewLayout(NavigationView.ID).setCloseable(false);  

    11. }  



     



    我們可以在里面部署我們的透視圖,比如透視圖開始位置,大小,是否可見等――系統通過傳入IpageLayout 對象,然后通過這個對象來實現上面的功能。


    介紹 WorkbenchAdvisor


    前面集中討論了構成 RCP 應用程序的各種組件。接下來將集中討論如何將所有的事物結合到一起。在構建 RCP 應用程序時,核心任務之一就是創建一個實現抽象類 org.eclipse.ui.application.WorkbenchAdvisor 的類。WorkbenchAdvisor 類負責配置工作臺,當執行 RCP 應用程序時,將顯示該工作臺。


    WorkbenchAdvisor 類包含下列方法,從而為開發人員提供了對普通工作臺的生命周期的訪問:



    • initialize —— 應該在顯示任何窗口之前首先調用該方法。

    • preStartup —— 其次執行的就是這個方法,但它的調用是在第一個窗口打開之前。在啟動或者恢復期間暫時禁用某些項時,該方法非常有用。

    • postStartup —— 對該方法的調用是執行的第三個操作,它的調用是在第一個窗口打開之后,可以用該方法重新啟用 preStartup 方法中臨時禁用的項。

    • postRestore —— 該方法的調用是在已經根據以前保存的狀態重新創建工作臺及其窗口之后。

    • preShutdown ——該方法的調用是在事件循環已經終止,任何窗口尚未關閉之前。

    • postShutdown ——這是最后一個方法,它在事件循環終止之后被調用。


    WorkbenchAdvisor 類包含下列方法,以便為開發人員提供對工作臺窗口生命周期的訪問:



    • preWindowOpen —— 在打開每個窗口時調用該方法。

    • fillActionBars —— 在調用 preWindowOpen 方法之后調用該方法,可以使用它配置窗口的動作欄。

    • postWindowRestore —— 在根據以前保存的狀態重新創建窗口之后調用該方法。

    • postWindowOpen —— 在已經打開一個窗口之后調用該方法。可以使用該方法注冊任何窗口監聽器。

    • preWindowShellClose —— 在用戶關閉窗口外殼時調用該方法。


    WorkbenchAdvisor 類包含下列方法,以便為開發人員提供對工作臺事件循環的訪問。



    • eventLoopException —— 可以調用該方法處理事件循環崩潰的異常。

    • eventLoopIdle —— 在沒有更多的事件需要處理的時候調用該方法。


    <!--[if !supportEmptyParas]--> <!--[endif]-->


    WorkbenchAdvisor 是個非常重要的類,它負責配置整個工作臺,一個Rcp程序只能存在一個WorkbenchAdvisor(工作臺)實例,但可以存在多個WorkbenchWindowAdvisor實例(工作窗口,相當于打開新窗口)。


    現象來詳細看下WorkbenchWindowAdvisorWorkbenchAdvisor是通過創建WorkbenchWindowAdvisor來實現工作臺的配置的,當然也可以不這么做。它也可以自己創建。但我覺得通過WorkbenchWindowAdvisor創建更靈活而且給人感覺更舒服。


    ActionBarAdvisor 這個類是我們用來定制菜單,工具條等。它的方法解釋如下


    protected void makeActions(final IWorkbenchWindow window) {


     //在這里可以通過窗口來定制action,比如文件中的打開,關閉,推出等action。


    }


    protected void fillMenuBar(IMenuManager menuBar) {


      //定制菜單


    }


    <!--[if !supportEmptyParas]--> <!--[endif]-->


    Application Rcp核心類,根據API說明,此類是RCP啟動的Main類,里面的run方法相當于普通java程序的main方法。通常這個類是建立RCP應用程序生成,代碼結構基本不用去修改。


    java 代碼


     


    1. Display display = PlatformUI.createDisplay();  

    2.         try {  

    3.             int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());  

    4.             if (returnCode == PlatformUI.RETURN_RESTART) {  

    5.                 return IPlatformRunnable.EXIT_RESTART;  

    6.             }  

    7.             return IPlatformRunnable.EXIT_OK;  

    8.         } finally {  

    9.             display.dispose();  

    10.         }  





    我們可以很清楚的知道,線程會在PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());這里不挺的運行,直到程序崩潰或者用戶退出才會返回。


    <!--[if !supportEmptyParas]--> <!--[endif]-->


    恩。我想我基本上知道rcp是怎么運行的了,我對主管說?


    那好啊。你總結下,它是怎么運行的。


    首先通過plugin.xml文件配置rcp的各個方面,比如擴展點,需求包等。這個文件就好像spring的bean配置文件,告訴了容器上下文。


    “我說的對不對啊,主管。”我跟主管說。


    “那MANIFEST.MF這個文件的用途是什么呢?”主管說。


    我查查啊。噢,原來是跟OSGI有關的啊,在xx版本的esplise以前,plugin.xml做了全部工作,后來改進了。把一些工作放到MANIFEST.MF這個文件來了。我想它主要對OSGI框架運行的元數據包裝吧,比如定義RCP的運行環境跟依賴項目(有可能是插件)。


    <!--[if !supportEmptyParas]--> <!--[endif]-->


    對了我們基本上算是了解了RCP的一些基本只是,我現在想了解下,我點擊那些菜單的時候為什么會有反映的,它是怎么做到的?


    那么我們試驗下吧。經過查找API我們發現了Iaction,字面上怎么跟webwork的action差不多啊。因為根據名稱我們知道action具體是做什么的。它也是一個Command模式的經典應用嗎?


    我想是的。看看它的方法


    java 代碼


     


    1. public void run() {  

    2.         MessageDialog.openInformation(window.getShell(), "Open""Open Message Dialog!");  

    3.     }  

    4. }  






    這就更清楚了。我們只要繼承Action并覆蓋它的run方法就可以實現點擊的動作了。哈哈。Eclispe我太喜歡你了,


    好我們自己來定義實現一個Action吧。





    java 代碼


     


    1. public class MessagePopupAction extends Action {  

    2.   

    3.     private final IWorkbenchWindow window;  

    4.   

    5.     MessagePopupAction(String text, IWorkbenchWindow window) {  

    6.         super(text);  

    7.         this.window = window;  

    8.         // The id is used to refer to the action in a menu or toolbar  

    9.         setId(ICommandIds.CMD_OPEN_MESSAGE);  

    10.         // Associate the action with a pre-defined command, to allow key bindings.  

    11.         setActionDefinitionId(ICommandIds.CMD_OPEN_MESSAGE);  

    12.         setImageDescriptor(org.wuhua.rcp.Activator.getImageDescriptor("/icons/sample3.gif"));  

    13.     }  

    14.   

    15.     public void run() {  

    16.         MessageDialog.openInformation(window.getShell(), "Open""Open Message Dialog!");  

    17.     }  

    18. }  



     


    上面只是我對rcp一點認識,如果要想設計好rcp我覺得除了對這些基本知識要有了解外,對swt/jface也是要有充分的認識的。

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(293) | 評論 (0)編輯 收藏

    用easymock測試jdbc

         雖然以前用easymock測試過Dao,但那些Dao的實現,要么就hibernate,要么就用spring,而這兩個框架的執行正確與否我們是不用關心的。JDBC是不是也這樣測試了。答案是肯定的。

          這幾天要用存儲過程跟jdbc來做個項目,想想也有好長一段時間沒用過JDBC來做項目了。該復習復習了。

          前陣子學了easymock,真好現在可以派上用場了。不過在測試的過程中還是遇到了不小問題,想來是自己基礎不好的緣故。



           這次不TDD了,太麻煩了。

           先看看我們要測試的代碼

         

    java 代碼


     


    1. CallableStatementcstmt = null;  

    2.         try {  

    3.             cstmt = _conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");  

    4.             cstmt.setString(1"1");  

    5.             cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  

    6.   

    7.             cstmt.executeUpdate();  

    8.             return cstmt.getString(2);  

    9.   

    10.         } catch (Exception e) {  

    11.             GxDebug.logException(e);  

    12.             e.printStackTrace();  

    13.             return null;  

    14.         } finally {  

    15.             if (cstmt != null)  

    16.                 try {  

    17.                     cstmt.close();  

    18.                 } catch (Exception e) {  

    19.             }  

    20.         }  



      代碼還挺長的。從上面的代碼我們知道我們必須mock兩個對象進去。一個是Connection, 一個是CallableStatementcstmt 。

    好再看看我們的測試代碼

    java 代碼



    1. conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");  

    2.     conControl.setReturnValue(cstmt);  

    3.     conControl.replay();  

    4.       

    5.     cstmt.setString(1"1");  

    6.     cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  

    7.     cstmt.executeUpdate();  

    8.     cstmtControl.setReturnValue(1);  

    9.     cstmt.getString(2);  

    10.     cstmtControl.setReturnValue("5,4,3");  

    11.     cstmt.close();  

    12.     cstmtControl.replay();  

    13.       

    14.       

    15.     String rusult = dao.getNumber();  

    16.     Assert.assertEquals("5,4,3", rusult);  

    17.       

    18.     conControl.verify();  

    19.     cstmtControl.verify();  





    oh,my got!測試代碼比實現代碼還要多。這段代碼能執行嗎?

    我想可以的。easymock的原理是記錄-回放的模式。

    我想要做的工作是:

    1,記錄你mock對象的工作記錄,比如上面的代碼我們mock對象的工作記錄是:

    java 代碼



    1. conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");  

    2.         conControl.setReturnValue(cstmt);  

    3.         cstmt.setString(1"1");  

    4.         cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  

    5.         cstmt.executeUpdate();  

    6.         cstmtControl.setReturnValue(1);  

    7.         cstmt.getString(2);  

    8.         cstmtControl.setReturnValue("5,4,3");  

    9.         cstmt.close();  

    10.   





     如果你工作記錄的代碼要求有返回值的話,那么你必須提供一個自定義的值給它,否則會報錯。比如上面的


  •  cstmt.getString(2);  

  •         cstmtControl.setReturnValue("5,4,3");   //自己定義的返回值,用作以后的比較。



  • 上面的是記錄操作,回放的時候,easymock會把記錄的操作跟你實際的代碼進行比較,如果里面出了什么差錯,那么不好意思你的代碼有問題,請修正后再測試。



    如果有興趣可以自己試下。

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(187) | 評論 (0)編輯 收藏

    心里學概述

    心理學是研究人和動物心理活動和行為表現的一門科學。心理學一詞來源于希臘文,意思是關于靈魂的科學。


        靈魂在希臘文中也有氣體或呼吸的意思,因為古代人們認為生命依賴于呼吸,呼吸停止,生命就完結了。隨著科學的發展,心理學的對象由靈魂改為心靈。直到19世紀初葉,德國哲學家、教育學家赫爾巴特才首次提出心理學是一門科學。


        人在生活實踐中與周圍事物相互作用,必然有這樣或那樣的主觀活動和行為表現 ,這就是人的心理活動,簡稱心理。具體地說,外界事物或體內的變化作用于人的機體或感官,經過神經系統和大腦的信息加工,就產生了對事物的感覺和知覺、記 憶和表象,進而進行分析和思考。另外人們在同客觀事物打交道時,總會對它們產生某種態度,形成各種情緒。人 們還要通過行動去處理和變革周圍的事物,這就表現為意志活動。


        以上所說的感覺、知覺、思維、情緒、意志等都是人的心理活動。心理活動是人們在生活實踐中由客觀事物引起、在頭腦中產生的主觀活動。任何心理活動都是一種不斷變化的動態過程,可稱為心理過程。


        人在認識和改造客觀世界中,各自都具有不同于他人的特點,各人的心理過程都表現出或大或小的差異。這種差異既與各人的先天素質有關,也與他們的生活經驗和學習有關,這就是所說的人格或個性。


        心理過程和人格都是心理學研究的重要對象。心理學還研究人的個體的和社會的、正常的和異常的行為表現。動物心理學研究動物的行為,這不僅是為了認識動物心 理活動本身,也有助于對人類心理活動的了解。在高度發展的人類社會中,人的心理獲得了充分的發展,使他攀登上動物進化階梯的頂峰。心理學是人類為了認識自 己而研究自己的一門基礎科學。


    心理學發展簡史


    戰國末期唯物主義思想家、教育家—荀子    心理學作為一門科學只有很短的歷史,但卻有一個漫長的過去。心理學可以追溯到古代的哲學思想,哲學和宗教很早就討論了身和心的關系以及人的認識是怎樣產生的問題。古希臘哲學家如柏拉圖、亞里士多德等,中國古代思想家荀子、王充等都有不少關于心靈的論述。


        在西方,從文藝復興到19世紀中葉,人的心理特性一直是哲學家研究的對象,心理學是哲學的一部分。這段時期,英國的培根、霍布斯、洛克等人,以及18世紀末法國的百科全書派思想家都試圖糾正中古時代被神學歪曲了的心理學思想,并給予符合科學的解釋。


        培根的歸納科學方法論對整個近代自然科學的發展起了很大作用,霍布斯提出人的認識來源于外在世界,洛克最早提出聯想的概念,這都推動了心理學的發展。法國 百科全書派的拉梅特里在《人是機器》一書中干脆把人說成是一架機器,這些雖然不免有機械唯物論的觀點,但都有進步意義。


        19世紀中葉,由于生產力的進一步發展,自然科學取得了長足的進步,科學的威信在人們的頭腦中逐步生根。這時,作為心理學孿生科學的生理學也接近成熟,心理學開始擺脫哲學的一般討論而轉向于具體問題的研究。這種時代背景為心理學成為一門獨立的科學奠定了基礎。德國心理學家馮特


        現代心理學是在1879年建立的。這一年,德國心理學家馮特在萊比錫建立了世界上第一個心理學實驗室,心理學從此宣告脫離哲學而成為獨立的科學。馮特是一 位哲學家兼生理學家,他的心理學實驗室主要研究感知覺心理過程,所用的主要是生理學的實驗技術,所以他稱自己的這種研究為“生理心理學”,也稱為“實驗心 理學”。


        至今現代心理學已經經歷了一百多年的歷史。在這期間關于心理學研究對象的討論有過幾次大的反復。最初,馮特認為心理學是研究人的直接經驗或意識的科學,復 雜的心理活動是由簡單的單元構成的,心理學的任務就是把心理活動分解為一些心理元素。例如,對一本書的知覺是由長方的形狀、一定的大小、綠色的書皮等感覺 成分相加而成的。


        這種看法無疑受到當時化學發展的影響。化學采取了分析的方法,化學元素才不斷被發現。正因為如此,后人才把馮特的心理學體系稱作元素心理學或構造心理學。 馮特晚年還開展了民族心理學的研究,這是現代社會心理學的先導。馮特在萊比錫招收了歐美各國大批進修生,他們學成歸國后,分別建立心理學系和心理學實驗 室,使這門新興的科學得到迅速推廣。


        馮特所創立的心理學只興盛了三、四十年就遇到困難。問題出現在“心理學是研究意識的科學”這個定義上。因為要承認這個定義,首先就要求承認意識的存在,但是,這不是心理學界所有的人都能同意的。1913年美國心理學家華生首先向馮特的心理學提出挑戰。


        華生指出,心理學如果要成為一門科學,能和自然科學其他學科處于平等地位,就必須來一場徹底的革命,就要放棄意識作為心理學的研究對象。華生說意識是主觀的東西,誰也看不見、摸不到,更不能放到試管里去化驗,這樣虛渺的東西決不能成為科學的研究對象。


        他認為科學的心理學要建立在可以客觀觀察的事物上面。人和動物的行為是可以客觀觀察的,因而行為才是心理學研究的對象。心理學是研究行為的科學,它要探討 一個使有機體發生了什么,在什么環境下產生了什么行為。至于頭腦內部發生的過程,由于只能推測,不能肯定,所以不必給予理會。華生在心理學界掀起了一場影 響深遠的行為主義運動。


    金絲猴的行為研究    20世紀40年代前后出現了新行為主義,強調在實驗操作的基礎上研究人和動物的行為。新行為主義者斯金納最大膽的嘗試是把行為主義原理用于改造社會。他寫 過一本小說《沃爾登第二》,是以日記的形式描寫一個烏托邦式的理想社會。斯金納把這種社會設計稱作“行為工程”,并把這樣一個社會的實現寄托于中國。20 世紀60年代,美國卷入越南戰爭,社會危機四起,人們開始懷疑美國的社會制度,向往一個理想社會,于是這本書便不脛而走。


        行為主義在美國影響很大,從20年代到50年代。行為主義一直統治著美國心理學。現在看來,行為主義的理論太簡單化和絕對化了,不能因為頭腦的活動看不 見,就否認人的思維和意識的存在。同樣,在物理學中,原子、分子、電子也不能被肉眼見到,但仍可以用儀器或其他工具進行研究。人的思維等心理活動同樣可以 通過技術手段進行客觀的研究。心理學畢竟要研究人的心理的內部過程。再者,人的社會活動極為復雜,不是簡單的行為工程所能闡明的。


        在行為主義興起的同時,在歐洲又出現了兩大心理學派別,一個是格式塔學派,另一個是精神分析學派。


        格式塔心理學誕生于德國,它反對馮特的構造心理學的元素主義,其代表人物是韋特海默、科夫卡和克勒。格式塔是德語Gestalt的音譯,意思是整體、完 形。這個學派主張心理學研究人腦的內部過程,認為人在觀察外界事物的時候,所看到的東西并不完全決定于外界,而是在人的頭腦中有某種“場”的力量把刺激組 織成一定的完形,從而決定人看到的外界東西是什么樣的。當時,物理學中正流行著“場”的理論,格式塔學派則認為人的大腦是物質世界的一部分,所以物理規律 可以同樣適用于人腦的活動。大猩猩的面部表情


        格式塔心理學對猿猴的智力進行了研究。克勒觀察了猿猴如何把幾只木箱疊起來,爬到木箱頂上拿到懸掛在屋頂上的香蕉。猿猴還能把棍棒連起來取得被欄桿擋住的食物。格式塔心理學家認為人和動物解決問題是靠突然發生的“頓悟”。


        格式塔學派反對馮特學派只強調分析的做法,而認為心理現象是一個整體,整體決定其內在的部分。這種強調整體和綜合的觀點對以后心理學的發展是有益的。科學研究不應只從分析的觀點看問題,整體中的相互關系是更重要的一面。


        精神分析學派來源于精神病學。它給予心理學以巨大的沖擊,以致在討論心理學對象的時候不能不提到它。奧地利醫生弗洛伊德利用催眠術和自由聯想法讓精神病患 者回憶往事,以找出致病的原因。他發現患者的幼年經驗,特別是兒童與父母的情感關系非常重要。他還發現做夢往往反映出一個人的內在心理矛盾,所以分析病人 的夢也是一種治療方法。


    奧地利精神病醫生、精神分析創始人弗洛伊德    弗洛伊德認為,一方面人的內在生物性的情欲是最基本的沖動;另一方面人的社會習俗、禮教和道德又約束著這種原始沖動的發泄,將其壓抑到無意識中去。意識的 內容是理智的、自覺的;無意識的內容多是與理智、道德相違背的。當理智與無意識的矛盾激化,就造成神經癥。為了治病就需要對病人的無意識進行心理分析。這 就是精神分析。


        精神分析學派認為,心理學是研究“無意識”的作用。認為人的根本心理動機都是無意識的沖動。正是這種強有力的“無意識”的心理活動在人的生活中起著決定性 的根本作用。至于有意識的心理過程則只是顯露在表面的一些孤立的片斷。近年的新精神分析已不再那么強調生物沖動的作用,而更為重視人際間的社會關系。在西 方社會中精神病發病率很高,所以精神分析理論很容易被接受。


        在心理學的發展上,蘇聯心理學同以美國為代表的西方心理學是有區別的。謝切諾夫以大腦的反射為心理學的基本概念,稍后的別赫捷列夫寫了《反射學》一書。接 著,巴甫洛夫專門研究了條件反射。他的條件反射學說促進了美國行為主義的興起。 巴甫洛夫學說對蘇聯心理學產生了巨大的影響,成為其理論基礎之一,也直接影響了新中國成立以后我國以及一些東歐國家的心理學。


        在中國,現代心理學開始于清代末年改革教育制度、創辦新式學校的時候。在心理學大綱扉頁當 時的師范學校里首先開設了心理學課程,用的教材多是從日本和西方翻譯過來的。 1907年王國維從英文版重譯丹麥霍夫丁所著《心理學概論》。1918年陳大齊著《心理學大綱》出版,這是中國最早以心理學命名的書籍。1917年北京大 學建立心理學實驗室,1920年南京高等師范學校建立中國第一個心理學系。


        這時,構造心理學、行為主義心理學、格式塔心理學、精神分析等都被介紹到中國來,中國也開始有了自己的心理學研究。新中國成立后,1951年便成立了中國科學院心理研究所,在幾所大學和各師范院校都設立了心理學專業和教研室。


    心理學的近況


        幾十年來,心理科學獲得了迅速的發展,這種發展的一個值得注意的特點是,心理學各派之間的爭論已經不再激烈,而是趨向求同存異,各家的合理思想被保留下來,使它們之間的區別縮小了。這種在心理學對象、方法問題上爭論的減弱,表明心理學逐漸走上成熟的道路。


    可用于心理診斷的羅夏墨漬圖    當代心理學的另一個特點是它的跨學科和多學科性質。心理學和一些鄰近學科的重疊,已使它們的某些部分難于區別。心理學已經發展成為一門分支眾多、邊界模糊的科學。


        心理學是兼有自然科學和社會科學兩種屬性的科學。


        一方面,它與生物科學結合,探討心理活動的生理基礎。它伸展到技術科學領域,與計算機科學相聯系,促進了認知科學的發展。心理學還研究人類個體的發生發展,提供了關于人的認知能力和個性社會化的發展觀。


        另一方面,心理學與社會科學結合,研究社會、政治、經濟、文化的影響,以及人際交往中的社會心理現象。時至今日,心理學發展得更加寬廣龐雜,這就要求從哲學的高度對它進行理論概括。理論心理學就是從宏觀上探討心理學的思想體系。


        由于心理學的研究范圍相當廣闊,不同復雜程度的心理活動可能需要不同的理論模式和研究手段,因而當代心理學是把人和動物的復雜心理活動分成不同的層次,在不同的水平上加以研究的。心理學問題概略地分為以下幾個層次。


        生理心理學 是從生理學的水平研究各種心理現象的學科。在早期,巴甫洛夫用條件反射方法研究動物的學習活動,提出人的心理活動的高級神經活動學說。


        現代的生理心理學用神經生理學、生物物理學和生物化學的手段來研究感知、學習、記憶、思維、情緒等過程,目的是闡明各種心理活動的生理機制。由于生物醫學技術的進步,這方面的研究取得了很大成績。休伯爾和維厄瑟的感受野研究,斯佩里的割裂腦的研究最為著名。巴甫洛夫條件反射試驗


        在記憶方面,人們相信既然經驗可以在頭腦中長久地保存下來,那么大腦的生理結構必定發生了某種物質變化,或遺留下某種痕跡。人們設想,核糖核酸就是要尋找 的記憶物質。研究還發現,能促進蛋白質合成的藥物可以加速學習過程,抑制蛋白質合成的藥物則阻止長時記憶的發展。這些關于記憶的腦化學研究增進了對心理過 程的了解。


        生理心理學主要用動物做實驗,有時也結合醫療實踐進行臨床研究。它采用生物科學的通用研究方法,主要是在控制條件下實施手術或使用藥物的實驗法。從事這一 領域的研究者不只有心理學家,還有神經生理學家、生物物理和生物化學家等。生理心理學有時也被列為神經科學的一個分支。


        認知心理學 這是20世紀60年代新興起的心理學方向。認知心理學是從反對行為主義發端的,同時繼承了格式塔心理學的觀點。認知心理學以研究高級心理活動,特別是記憶、思維和問題解決為主要目標。這一點正是格式塔心理學的主張。


        認知心理學是心理學以外的其他科學對心理學發生影響的典型例子。第二次世界大戰期間迅速發展起來的通信技術,特別是信息論和控制論的出現,使心理學家看到 人類認識過程與通信系統有一定的相似性,于是借用通信工程師描述信息通道的概念來描述人的認識過程。人的認知過程被看成是信息通道的輸入、編碼、譯碼、存 儲、提取、輸出等處理信息的過程。


        認知心理學的主要理論是信息加工理論,所以又稱為信息加工心理學。50~60年代,紐厄爾和西蒙把人類所具有的概念、觀念、表征等腦的內部過程看作是物理 符號過程,這就是當代認知心理學中極為重要的物理符號系統假設。這一假設在人腦的思維活動和計算機的信息操作之間架起了一座橋梁,從而在信息加工心理學的 研究基礎上,可以設計計算機程序來模擬人的心理過程,特別是思維、問題解決等高級心理活動。認知心理學和計算機科學相結合,產生了人工智能這一新學科。


        發展心理學 發展心理學是研究人從出生到老年不同時期的心理特點和規律的學科。人的身體和心理在時間進程中表現出量和質兩方面的變化。人的發展在量的方面的變化是明顯的。隨著年齡的增長,兒童的身高體重會增加詞匯量不斷擴大,知識范圍越加廣闊,這些都是可以計量的。


        發展心理學是當代心理學比較活躍的一個分支。由于采用了新的研究方法和儀器設備,特別是錄音和錄像記錄的使用,使得這個領域的研究獲得了許多新的發現。大腦


        今天許多心理學家認識到,發展貫穿于人的一生之中,生命的每一階段都受前一時期的影響,同時又影響到以后的發展。


        一個稱作畢生發展心理學的新的研究方向正在形成,它從人的生命的全程發展著眼,研究從產前到死亡的全部心理和行為變化。由于許多國家的人口都趨向老年化,老年心理問題日益突出,因而這方面的研究受到重視。


        社會心理學  是研究個體和群體在社會相互作用中的社會心理和社會行為的發生和變化規律 的學科。社會心理學在兩個水平上對人際關系進行分析,即個體和社會群體的水平。


        社會心理學研究人的心理發展的社會化過程,包括兒童的交往,言語的發展,伙伴、家庭、居住環境以及學校對人的影響,這些影響以什么規律起作用等;在成人個體的交往中,又有 那些社會心理規律起作用。


        社會心理學中的歸因理論就是說明在人際交往中,人是如何為某種行為找出解釋原因的。歸因問題是當前社會心理學研究的中心課題之一。


        幾十年以來心理學一直朝著科學化的方向發展,它以物理學、生物科學以致技術科學為榜樣來建立自己的理論體系。這就不可避免地帶來一定程度的還原論和機械決 定論的傾向。正在這個時期,西方文化中流行的人道主義社會思潮滲入心理學,出現了社會心理學中的人本主義心理學。


        人本主義心理學的代表人物馬斯洛和羅杰斯等人反對心理學中的機械決定論,認為傳統的走自然科學道路的心理學不足以解決更復雜的人類心理學問題,特別是涉及價值觀和信仰的問題。


        社會心理學與社會學有非常密切的關系,它們所研究的是同一社會現象的不同方面。社會學從比較宏觀、概括的水平上研究社會問題,社會心理學則是從比較具體 的、微觀的水平上研究人際交往活動。由于人的社會生活的極端復雜性,雖然社會心理學的研究工作存在著許多困難,但是從人的心理的社會制約性出發,必定能總 結出人的社會心理學規律。


        理論心理學  是從哲學的高度探討心理學的方法論的學科,包括討論心理學的對象和方法,意識的起源和發展,身與心的關系,以及評述心理學的思想體系等。


    心理學的應用


        心理學與人類生活關系密切,它對人類生活起著越來越大的作用,其應用范圍也在不斷地擴大。心理學家能參加解決教育、醫療、工業、商業、軍事及各種社會問題。下面列舉的就是心理學在一些應用領域中所形成的分支學科:


        教育心理學  教育心理學是研究教育過程中的心理活動規律,揭示教育過程和心理發展的關系,把發展心理學的研究成果應用到教育實踐中去。教育心理學的主要研究內容包括 :受教育者知識和技能的掌握,心理的個別差異,道德品質的形成,教育者應有的心理品質等。


        學科教育心理學研究語文、算術等課程的內容和教法,也屬于教育心理學的范圍。德育心理學研究兒童道德動機、道德判斷的形成過程,探討培養優秀道德品質、正確信念和理想的有效途徑。教育心理學的研究直接關系到教育改革和人材培養的重大任務。


        醫學心理學 是關于疾病和健康的心理學研究,探討心理因素在維護健康和致病方面的作用,并研究在醫療中醫護人員與病人的行為特點。醫學心理學家在綜合醫院、專科醫院,特別是在精神病醫院中發揮作用,他們用心理測驗診斷病人,找出心理障礙的原因。


        醫學心理學還研究精神藥物的作用,需探討心理治療的方法。病人的康復過程也是醫學心理學的研究內容,目的是調動病人的心理因素,使他盡快恢復健康。醫學心理學家也從事心理咨詢和心理衛生工作,對促進人的身心健康提供指導與幫助。


       工業心理學 主要包括工程心理學和管理心理學。


        工程心理學研究現代工業中人與機器的關系,又稱人機系統,這是在工程設計中使設備適應人體的活動特點,從而使工作效率達到最高。工廠的溫度、照明和工作條 件,航空工業中飛機座艙的儀表顯示,車船駕駛系統的合理性都是工程心理學研究的課題。它還研究工業勞動中,職工心理活動的特點和規律。


        管理心理學研究職工的選拔訓練、評價、使用等人事組織問題,還研究工作動機、鼓勵手段、意見溝通、組織結構、領導行為等心理學問題。這些研究的目的是調動人的積極性,充分發揮人的潛在能力,形成和諧的工作氣氛和提高工作效率。


        商業心理學 研究商業活動中人的心理活動及其規律,運用心理學知識和方法解決商品流通過程中有關的行為問題。它包括市場心理學、消費者心理學和廣告心理學。


        市場心理學研究市場供求關系中心理因素的作用,消費者心理學研究商品生產、商品流通,以及服務行業中消費者的心理規律,包括購買動機的分析、購買行為的特 點等。廣告心理學研究商標、包裝、廣告的設計,其心理效果的評價等。商業心理學的研究在以市場經濟為主的國家里很受重視,成為商業競爭的重要手段。中國這 方面的工作尚待開展。


        法律心理學 研究人們在司法活動中的心理活動及其規律。法律心理學根據不同的方面,又可分為犯罪心理學、偵察心理學、審判心理學等。


        犯罪心理學研究犯罪的動機及對罪犯的教育改造等問題;偵察心理學研究在偵破案件過程中所應依循的心理規律;審判心理學的一項重要內容是分析犯人供詞及證人 證詞的可靠程度 ;法律心理學的另一重要分支是司法鑒定心理學,這是運用臨床精神病學專業知識,對被懷疑有精神障礙的被告或其他訴訟當事人進行心理鑒定,為確定其法律責任 提供科學依據。


       軍事心理學 研究人在軍事活動條件下的心理學問題。這些問題包括軍事人員的選拔和分類;掌握軍事技術和武器的學習過程;軍事活動所要求的個性心理特征;心理戰術,宣傳 與反宣傳等。軍事心理學把軍事組織看成是一個小的社會整體,研究其中的社會過程,如指揮員和士兵的關系,戰爭條件下群體內部情緒的相互影響,軍隊士氣的作 用等。


        根據兵種的特點,軍事心理學又可分為航天與航空心理學和航海心理學。航空與航天心理學除研究一般軍事活動的心理規律外,還研究宇航員的意志和品德的培訓, 在失重、超重條件下的心理變化及適應能力等 ;航海心理學則要研究在長期離開陸地情況下的心理變化,海上戰斗和艦艇操縱中的特有心理學問題。世界各國的軍事心理學研究都屬于保密的范圍,只有在失去軍 事價值的時候,才能夠公開發表。


        現在,心理學的發展已經有一百多年的歷史,它不僅是一門理論性強的基礎科學,而且已經發展成為一門應用范圍廣泛的應用科學。它與許多實踐部門有著廣泛的橫向聯系,并且廣泛地為社會實踐服務

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(134) | 評論 (0)編輯 收藏

    社會心里學

    社會心理學是研究個體和群體的社會心理現象的心理學分支。個體社會心理現象指受他人和群體制約的個人的思想、感情和行為,如人際知覺、人際吸引、社會促進 和社會抑制、順從等。群體社會心理現象指群體本身特有的心理特征,如群體凝聚力、社會心理氣氛、群體決策等。

        社會心理學是心理學和社會學之間的一門邊緣學科,受到來自兩個學科的影響。在社會心理學內部一開始就存在著兩種理論觀點不同的研究方向,即所謂社會學方向 的社會心理學和心理學方向的社會心理學。在解釋社會心理現象上的不同理論觀點,并不妨礙社會心理學作為一門獨立學科應具備的基本特點。


        一般來說,普通心理學研究主體與客體之間的一般關系 ,客體包括自然客體與社會客體。社會心理學則主要研究主體與社會客體之間的特殊關系,即人與人、人與群體之間的關系;普通心理學的規律可以應用于社會心理 學,社會心理學研究主體與社會客體之間的關系所獲的規律 ,也可以豐富普通心理學;普通心理學傳統上著重于研究個體、個人與物之間的關系,而社會心理學則著重于研究群體中的個體、群體、人與人、人與群體的關系。


        社會心理學與個性心理學的關系更加密切、更加復雜。美國心理學會迄今仍把個性與社會心理學放在一個分支里。一般說來個性心理學是研究個性特質形成和發展的 規律,涉及自然和教化的關系、涉及較穩定的心理特質,而社會心理學則主要研究直接社會情境對個人的影響以及個人對這個情境的解釋的作用。社會心理學的一個 重要發現表明,直接社會情境的作用往往被低估了。


        社會心理學的專題研究,開始于19世紀下半期。1860年出現了拉察魯斯和斯坦塔爾關于民族心理學的系列論文 ;此后,塔爾德的《模仿律》西格爾的《犯罪的群眾》、勒邦的《群眾心理學》等著作陸續出版,為社會心理學的形成奠定了基礎;1908年,英國心理學家麥獨 孤和美國社會學家羅斯分別出版了社會心理學專著 ,這標志著社會心理學已成為一門獨立的學科。


        第一次世界大戰以后,美國心理學家奧爾波特和德國心理學家默德開創了實驗社會心理學方向。雖然用實驗方法研究社會心理學問題,可以上溯到1898年特里普 利特關于社會促進的實驗研究,但真正開創、推廣這個方向的是奧爾波特和默德。在他們之后,實驗社會心理學才開始在西方特別是在美國成了社會心理學研究的主 流。


        奧爾波特的著作《社會心理學》問世以后,社會心理學進入一個快速發展時期。1928年 ,瑟斯頓提出了態度測量法,把由托馬斯和茲納涅茨基開始,并成為當時社會心理學研究中心的態度研究,提高了一步;1934年,莫雷諾提出了社會測量法,用 以測量群體內人際吸引和排斥問題 ;1938年,勒溫把場論引進社會心理學,提出了個人生活空間或場的概念,認為行為是個人特點和情境因素相互作用的函數。20世紀40~50年代,在第二 次世界大戰和勒溫的影響下,社會心理學主要研究群體影響和態度問題。


        50年代,阿施等人開展順從的研究。以霍夫蘭為首的耶魯學派發表了一系列有關說服的研究。費斯廷格提出了認知失調理論,這個理論成為60年代的研究中心。 到了70年代,由海德的《人際關系心理學》一書奠定了基礎的歸因理論成了研究重點。80年代以來,認知社會心理學和應用社會心理學日益受到重視。


        社會心理學研究的主要課題隨著時代的演變而有所不同。早期的社會心理學側重于研究大型群體和群眾的心理現象,如拉察魯斯、斯坦塔爾、馮特關于民族心理學的 研究;塔爾德、西格爾和勒邦關于群眾心理的研究。這些研究者所提出的某些思想直至今天還有影響,如塔爾德的模仿律、勒邦的群體極端化和個性消失的思想等。


        20世紀初,態度的研究成為中心。實驗社會心理學出現以后,社會促進的研究成為中心。以后,群體過程、說服、順從、認知失調、歸因等分別成為某一時期的研究中心。


        美國是研究社會心理學最多且最有影響的國家,它的研究課題具有一定的代表性,往往影響到其他國家。


        隨著社會心理學的日益發展,研究課題也日益豐富和擴大。從早期的社會促進研究 ,發展到社會惰化的研究;從順從的研究,發展到反順從和獨立性的研究;從侵犯的研究,發展到利他精神的研究;從吸引的研究,發展到愛情的研究;從人際知覺 的研究 ,發展到歸因的研究等等。顯示了社會心理學的研究視野正日益廣闊和深入。


        自 二十世紀60年代中期以來,社會心理學家的觀點有所改變。主要表現在:認識到實驗方法的局限性,重視現場研究,重視應用研究,重視以現場應用研究去檢驗實驗室研究所得的理論,加以修正、補充和發展。


        今天的社會心理學家強調從現場研究到實驗室研究,或從實驗室研究到現場研究,往復循環、相互論證。同時,計算機的廣泛使用,也為處理從現場獲得的大量材料提供了方便,推動了社會心理學的進步。

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(125) | 評論 (0)編輯 收藏

    設計一個J2me Wap瀏覽器幻想

           昨天完成了一個小程序,所以今天有比較空閑了,前陣子自己設計了j2me的UI,所以對在一手機畫布上繪制UI也算是比較有心得的。所以今天突發奇想,不如自己定制一個wap瀏覽器來玩下。

           自己以前也做過wap網站,所以也知道它的大概個標簽,想來通過xml包解釋這些標簽不難,現在把我的個人想法發到這里來,希望各位愛好者提供建議。

           1:設計一個可組裝的UI以提供對xml解釋后的支持。(基本上是采用以前的UI設計方式)。

           2: 采用網站流行的xml解釋包,對wml進行解釋,主要構思是采用一個2維表進行數據結構的保存。

           3:session機制,這方面是個難度,記得以前設計wap的時,在測試的時候發現有些手機并不支持session。個人想法是在手機上保存一個sessionId,然后發送這個Id,并時刻保持這個Id與服務器的一致。

           4:解釋機制,是否是一邊解釋一邊顯示,還是全部下載完,解釋完在顯示,在技術上的難度來講,第一個無疑是比較困難的,但是第二個在用戶體驗方面存在比較大的缺陷。

           5:緩存機制,主要難點是記錄用戶的操作,以及判斷服務器內容是否改變,從而決定是否重新下載,還是直接從緩存中獲取。



         以上幾點我只對第一點有把握,第2個估計看下文檔就ok了,其他方面我還沒有比較多的認識

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(94) | 評論 (0)編輯 收藏

    關于異常的處理以及相關設計

          最近設計程序的時候,老拋出NullPointerException,ArrayOutOfIndexException異常,發現這些異常的拋出對程序的穩定性是有好處的。它可以防止程序崩潰。

         不過相信開發過程序的人應該對這些異常操作是很厭煩,有什么辦法可以避免這些操作呢?

         什么時候拋出異常,什么應該在程序里抓住異常?

         比如你對一個對象的操作

        

    java 代碼


     


    1.    

    2. if(object == null)  

    3.      threws new NullPointerExcction("對象不應該為空");  

    4.   

    5.   

    6.   

    7. if(object == null)  

    8.      return;  



    這兩種方式在設計的時候經常使用,有些程序容許你對象為空的時候可以進行下一步操作,有些程序則強制要求上一步的環境一定要建立,比如對象步能為空,資源一定要存在等。



    歡迎各位高手談談異常體系上設計的心得,

    異常設計的好可以減少很多if,witch等語句。



    那個用戶登陸的例子來說吧。

    記得以前寫過程式編程的時的代碼如下:

    java 代碼


     


    1. int isNotExist = 1;  

    2. int succes = 0;  

    3. int passwordError= 2;  

    4. int ,......  

    5.   

    6.   

    7. int login(){  

    8. ...................  

    9. ................  

    10. return i;  

    11. }  





    采用異常處理時候

    java 代碼


     


    1. class UserNotFindExecption{  

    2. .........  

    3. }  

    4.   

    5. void login() throw Exception{  

    6. .........  

    7. throws new UserNotFindExecption()  

    8. }  





    這兩種設計方式就很考究你對異常的理解。

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(102) | 評論 (0)編輯 收藏

    Wap Explorer 圖片預覽

            前幾天說要設計一個Wap瀏覽器的,經過上個禮拜天的設計,基本已經把UI的框架搭建出來了。不過對于wap的Wml解釋器還沒寫,一來這方面比較難寫,沒有實踐過,二來這幾天公司有事情忙。所以就停了下來,不過趁著今天下午有空,我發些設計好的截圖給大家看。

             在UI里我實現了對字體的控制已經對皮膚(所謂的皮膚只是換換顏色而已)的控制

    艾可惜只能發3個附件。

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(138) | 評論 (0)編輯 收藏

    Wap Explorer 初步設計源代碼

            剛才在我的Q群里面討論了下關于Wap Explorer的開發。里面的朋友建議我把開發的過程寫到blog,以方便學習與討論。現在我把我寫好的代碼公布出來。并說明我的設計結構。(在此說明下,對于里面的UI設計我前面寫過很多文章)

           一個UI包--包括了所有的界面實現接口等,Wap的顯示也主要是通過這個包里面的東西劃出來的。

                                  里面有兩個核心的東西,Part--控件接口, Panel--Form接口。

                                  比如超鏈接,TextFiel,SoftButton等都是Part, 彈出窗口,FormPanel都是Panel。

           一個Wap引擎。這部分未實現,等大家參考。我參考過jxml等開源的東西,覺得基本上可以實現自己的功能,不過我還是想和大家寫一個,一來可以相互學習提高。二來也可以多了解下關于xml(這方面我很菜)。



          一個網絡連接引擎--主要是下載數據用的。

          一個RMS包。主要是用來保存用戶數據的。

         

          對了。在源代碼里之看wuhua包下面的就行了,其他的都是一些網站找來的代碼

             

          這里還有個問題是,怎么樣可以使Wap引擎跟UI跟網絡連接引擎很好的結合呢。

         提出一些參考:

         1,一邊下載,一邊解釋,一邊顯示(這是最完美的方案,比如firefox就是這樣)這樣對操作有大量圖片資源的時候有很好的體驗。我們可以先顯示出文字,然后在一邊下載圖片。

         2,全部下載完在解釋,顯示(相對與上面的方案來說)這是比較容易的。但是顯示會很慢。給用戶造成很不好的體驗。



         還有很多的其他要求。。。。。。。。

       

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(134) | 評論 (0)編輯 收藏

    WML 標簽跟WML學習

    上網找了這些標簽,方便設計。哈和哈

    一保存就變樣了。還是給個連接吧

    www.cnblogs.com/kangtr/archive/2005/12/02/289546.html

































    結構相關標簽 語法及屬性
    <wml>



       content



    <card>



    title="label"

    newcontext="boolean"

    style="style"

    onenterforward="url"

    onenterbackward="url"

    ontimer="url" >

    content



    <template>



    <head>



    content



    <access>



    path="path" />

    <meta>

    |http-equiv="name"

    content="value"

    forua="true | false" />

























































    任務相關標簽 語法及屬性
    <timer>



    value="value" />

    <setvar>



    value="value" />

    <anchor>



    <a>



    task

    text



    <do>



    label="label"

    name="name"

    optional="boolean" >

    task



    <onevent>



    task



    <go>



    sendreferer="boolean"

    method="method"

    accept-charset="charset"

    content



    <prev>




    content




    <noop>



    <refresh>



    content



































    控件相關標簽 語法及屬性
    <input>



    title="label"

    type="type"

    value="value"

    default="default"

    format="specifier"

    emptyok="boolean"

    size="n"

    maxlength="n"

    tabindex="n" />

    <select>



    <option>



    value="value"

    onpick="url" >

    content



    <optgroup>



    content



    <fieldset>



    content























    輸出效果標簽 語法及屬性
    <img>

    <code><b><i>text</i></b></code>

    src="url"

    localsrc="icon"

    align="alignment"

    height="n"

    width="n"

    vspace="n"

    hspace="n" />

    <table>



    title="label"

    columns="n"/>




























































    <td>

      content
    <tr>

     
    content
    <b>



    text



    <big>



    text



    <br>





    <em>



    text



    <i>



    text



    <p>




    mode="wrapmode" />


    <small>



    text



    <strong>



    text



    <u>



    text















































    特殊字符  
    <


    < (less than)


    >


    > (greater than)


    '


    ' (apostrophe)


    "


    " (quote)


    &


    & (ampersand)


    $$


    $ (dollar sign)


     


    non-breaking space


    ­


    soft hyphen



















    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(427) | 評論 (0)編輯 收藏

    XmlPullParser 的例子

         這幾天一直在思考怎么樣設計Wap的引擎。因為在j2me有限的資源上去解釋xml是比較慢的,所以j2se上的xml類庫是不適合用在j2me上,后來在網上查找了下發現了XmlPullParser ,而且用起來速度快,而且包也很小。現在把這兩天學到的知識記錄下來。



         我的需求是解釋一個標準的wml。比如:

       

    java 代碼


     


    1. <?xml version="1.0"?>  

    2. <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"


    3. "http://www.wapforum.org/DTD/wml_1.1.xml">  

    4. <wml>  

    5. <card id="index" title="天速">  

    6. <p align="center">天速科技</p>  

    7. <p align="center"><a href="/t/main.a"> 動漫天下 </a></p>  

    8. <p align="center"><a href="/t/main.a"> 國色天香 </a></p>  

    9. <p align="center"><a href="/eb/main.a">  風月書齋 </a></p>  

    10.   

    11. </card> </wml>  



    上面是個簡單的wml源文件。不過現在的wap網站差不都這樣,基本上沒有script,跟html上的各個控件。所以能解釋上面的文檔,基本上都是可以滿足我的需求的。



     現在我們來看下我們解釋wml的java文件
    java 代碼


     


    1. /******************************************************************** 

    2.  * 項目名稱             :<b>j2me學習 J2me Wap Explorer</b>            <br/> 

    3.  *  

    4.  * Copyright 2005-2006 Wuhua. All rights reserved </br> 

    5.  * 

    6.  * 本程序只用于學習目的,不能用于商業目的。如有需要請聯系作者 

    7.  ********************************************************************/  

    8.   

    9. import java.io.ByteArrayInputStream;  

    10. import java.io.IOException;  

    11. import java.io.InputStreamReader;  

    12.   

    13. import org.kxml2.io.KXmlParser;  

    14. import org.xmlpull.v1.XmlPullParser;  

    15. import org.xmlpull.v1.XmlPullParserException;  

    16. import org.xmlpull.v1.XmlPullParserFactory;  

    17. /** 

    18.  * <b>類名:Test.java</b> </br> 編寫日期: 2006-12-28 <br/> 程序功能描述: <br/> Demo: <br/> 

    19.  * Bug: <br/> 

    20.  *  

    21.  * 程序變更日期 :<br/> 變更作者 :<br/> 變更說明 :<br/> 

    22.  *  

    23.  * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a> 

    24.  */  

    25. public class Test {  

    26.   

    27.     //private static String xml = "<list><item>apple</item>"  

    28.         //  + "<item>orange</item>" + "<item>pear</item></list>";  

    29.   

    30.     private static String xml ="<?xml version=\"1.0\"?>"  

    31.     +"<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" "   

    32.     +"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"  

    33.     +"<wml>"  

    34.     +"<card id=\"index\" title=\"天速\">"  

    35.     +"<p align=\"center\">天速科技</p>"  

    36.     +"<p align=\"center\"><a href=\"/t/main.a\"> 動漫天下 </a></p>"  

    37.     +"<p align=\"center\"><a href=\"/t/main.a\"> 國色天香 </a></p>"  

    38.     +"<p align=\"center\"><a href=\"/eb/main.a\">  風月書齋 </a></p>"  

    39.   

    40.     +"</card> </wml>";  

    41.     public static void main(String args[])  

    42.   

    43.     throws XmlPullParserException, IOException {  

    44.            

    45.            

    46.         ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());  

    47.         InputStreamReader in = new InputStreamReader(bin);  

    48.         KXmlParser parser = new KXmlParser();  

    49.         parser.setInput(in);  

    50.   

    51.         int eventType = parser.getEventType();  

    52.         while (eventType != XmlPullParser.END_DOCUMENT) {  

    53.             if (eventType == XmlPullParser.START_DOCUMENT) {  

    54.                 //System.out.println("Start document:");  

    55.             } else if (eventType == XmlPullParser.END_DOCUMENT) {  

    56.                 //System.out.println("End document");  

    57.             } else if (eventType == XmlPullParser.START_TAG) {  

    58.                 System.out.println("  " + parser.getName());  

    59.                 //System.out.println("Start Count: " + parser.getAttributeCount());  

    60.                 int  size = parser.getAttributeCount();  

    61.                 for(int i=0; i<size; i++){  

    62.                     System.out.println("  " + parser.getAttributeName(i));  

    63.                     System.out.println("  " + parser.getAttributeValue(i));  

    64.                 }  

    65.                    

    66.                   

    67.             } else if (eventType == XmlPullParser.END_TAG) {  

    68.                 System.out.println(" " + parser.getName());  

    69.             } else if (eventType == XmlPullParser.TEXT) {  

    70.                 System.out.println("  " + parser.getText());  

    71.             }  

    72.             eventType = parser.next();  

    73.         }  

    74.     }  

    75.   








    現在解釋下上面的東西,

    XmlPullParser 只是個規范,可以到http://xmlpull.org/ 下載。我們來看看這個規范要求我們做些什么。

    里面主要的方法有
    java 代碼


     


    1. //定義一個事件采用回調的方式,直到讀取xml完畢。  

    2. public int getEventType() throws XmlPullParserException ;  

    3. //遍歷下一個事件,返回一個事件的類型  

    4. public int next() throws XmlPullParserException, IOException  

    5. //得到當前Tag名字  

    6. public String getName();  

    7. //獲取文本  

    8. public String getText();  

    9.   

    10. //得到當前Tag下面的屬性數量  

    11. public int getAttributeCount() ;  

    12. //得到當前Tag下面指定位置的屬性名稱  

    13. public String getAttributeName(int index);  

    14.   

    15. //得到當前Tag下面指定位置的屬性植  

    16. public String getAttributeValue(int index);  





    我們理解了XmlPullParser 可以自己實現一個XmlPullParser。不過java世界里好東西就是多。已經有人幫我們做了。

    啊就是kxml。

    這個API本身很簡單。當時要把一個完整的wml解釋并繪制在手機上還是要花相當的時間的。

    posted @ 2006-12-30 09:06 路是爬出來的 閱讀(557) | 評論 (0)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 
    主站蜘蛛池模板: 国产精品亚洲二区在线| 久草免费福利视频| 久久精品国产亚洲精品| a级毛片在线视频免费观看| 亚洲精品自拍视频| 国产一区视频在线免费观看| a在线视频免费观看在线视频三区 a毛片成人免费全部播放 | 亚洲精品无播放器在线播放| 亚洲自偷自偷图片| 亚洲第一成年免费网站| 亚洲精品国产日韩无码AV永久免费网 | 成全视频高清免费观看电视剧| 亚洲第一香蕉视频| 亚洲国产一级在线观看 | 精品亚洲国产成人av| 亚洲AV本道一区二区三区四区 | 亚洲成AV人片在线观看无码| 一区二区无码免费视频网站| 成人免费一区二区三区| 亚洲色大网站WWW永久网站| 国产亚洲美女精品久久久久狼| 在线观看亚洲免费| 37pao成人国产永久免费视频| 国产黄片不卡免费| 亚洲人成欧美中文字幕| 亚洲成人动漫在线| 亚洲精品无码你懂的网站| 午夜小视频免费观看| **一级一级毛片免费观看| 国产黄片不卡免费| 国产成人+综合亚洲+天堂| 亚洲人成电影青青在线播放| 国产亚洲无线码一区二区| xvideos亚洲永久网址| 成人午夜18免费看| 最近在线2018视频免费观看| 999zyz**站免费毛片| 国产福利在线观看永久免费| 国内成人精品亚洲日本语音| 国产午夜亚洲精品| 亚洲影视一区二区|