路是爬出来的

#

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 路是爬出来的 阅读(284) | 评论 (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 路是爬出来的 阅读(180) | 评论 (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 路是爬出来的 阅读(126) | 评论 (0)编辑 收藏

    社会心里学

    社会心理学是研究个体和群体的社会心理现象的心理学分支。个体社会心理现象指受他人和群体制约的个人的思想、感情和行为,如人际知觉、人际吸引、社会促进 和社会抑制、顺从等。群体社会心理现象指群体本身特有的心理特征,如群体凝聚力、社会心理气氛、群体决策等。

        社会心理学是心理学和社会学之间的一门边缘学科,受到来自两个学科的影响。在社会心理学内部一开始就存在着两种理论观点不同的研究方向,即所谓社会学方向 的社会心理学和心理学方向的社会心理学。在解释社会心理现象上的不同理论观点,并不妨碍社会心理学作为一门独立学科应具备的基本特点。


        一般来说,普通心理学研究主体与客体之间的一般关系 ,客体包括自然客体与社会客体。社会心理学则主要研究主体与社会客体之间的特殊关系,即人与人、人与群体之间的关系;普通心理学的规律可以应用于社会心理 学,社会心理学研究主体与社会客体之间的关系所获的规律 ,也可以丰富普通心理学;普通心理学传统上着重于研究个体、个人与物之间的关系,而社会心理学则着重于研究群体中的个体、群体、人与人、人与群体的关系。


        社会心理学与个性心理学的关系更加密切、更加复杂。美国心理学会迄今仍把个性与社会心理学放在一个分支里。一般说来个性心理学是研究个性特质形成和发展的 规律,涉及自然和教化的关系、涉及较稳定的心理特质,而社会心理学则主要研究直接社会情境对个人的影响以及个人对这个情境的解释的作用。社会心理学的一个 重要发现表明,直接社会情境的作用往往被低估了。


        社会心理学的专题研究,开始于19世纪下半期。1860年出现了拉察鲁斯和斯坦塔尔关于民族心理学的系列论文 ;此后,塔尔德的《模仿律》西格尔的《犯罪的群众》、勒邦的《群众心理学》等著作陆续出版,为社会心理学的形成奠定了基础;1908年,英国心理学家麦独 孤和美国社会学家罗斯分别出版了社会心理学专著 ,这标志着社会心理学已成为一门独立的学科。


        第一次世界大战以后,美国心理学家奥尔波特和德国心理学家默德开创了实验社会心理学方向。虽然用实验方法研究社会心理学问题,可以上溯到1898年特里普 利特关于社会促进的实验研究,但真正开创、推广这个方向的是奥尔波特和默德。在他们之后,实验社会心理学才开始在西方特别是在美国成了社会心理学研究的主 流。


        奥尔波特的著作《社会心理学》问世以后,社会心理学进入一个快速发展时期。1928年 ,瑟斯顿提出了态度测量法,把由托马斯和兹纳涅茨基开始,并成为当时社会心理学研究中心的态度研究,提高了一步;1934年,莫雷诺提出了社会测量法,用 以测量群体内人际吸引和排斥问题 ;1938年,勒温把场论引进社会心理学,提出了个人生活空间或场的概念,认为行为是个人特点和情境因素相互作用的函数。20世纪40~50年代,在第二 次世界大战和勒温的影响下,社会心理学主要研究群体影响和态度问题。


        50年代,阿施等人开展顺从的研究。以霍夫兰为首的耶鲁学派发表了一系列有关说服的研究。费斯廷格提出了认知失调理论,这个理论成为60年代的研究中心。 到了70年代,由海德的《人际关系心理学》一书奠定了基础的归因理论成了研究重点。80年代以来,认知社会心理学和应用社会心理学日益受到重视。


        社会心理学研究的主要课题随着时代的演变而有所不同。早期的社会心理学侧重于研究大型群体和群众的心理现象,如拉察鲁斯、斯坦塔尔、冯特关于民族心理学的 研究;塔尔德、西格尔和勒邦关于群众心理的研究。这些研究者所提出的某些思想直至今天还有影响,如塔尔德的模仿律、勒邦的群体极端化和个性消失的思想等。


        20世纪初,态度的研究成为中心。实验社会心理学出现以后,社会促进的研究成为中心。以后,群体过程、说服、顺从、认知失调、归因等分别成为某一时期的研究中心。


        美国是研究社会心理学最多且最有影响的国家,它的研究课题具有一定的代表性,往往影响到其他国家。


        随着社会心理学的日益发展,研究课题也日益丰富和扩大。从早期的社会促进研究 ,发展到社会惰化的研究;从顺从的研究,发展到反顺从和独立性的研究;从侵犯的研究,发展到利他精神的研究;从吸引的研究,发展到爱情的研究;从人际知觉 的研究 ,发展到归因的研究等等。显示了社会心理学的研究视野正日益广阔和深入。


        自 二十世纪60年代中期以来,社会心理学家的观点有所改变。主要表现在:认识到实验方法的局限性,重视现场研究,重视应用研究,重视以现场应用研究去检验实验室研究所得的理论,加以修正、补充和发展。


        今天的社会心理学家强调从现场研究到实验室研究,或从实验室研究到现场研究,往复循环、相互论证。同时,计算机的广泛使用,也为处理从现场获得的大量材料提供了方便,推动了社会心理学的进步。

    posted @ 2006-12-30 09:06 路是爬出来的 阅读(116) | 评论 (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 路是爬出来的 阅读(87) | 评论 (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 路是爬出来的 阅读(98) | 评论 (0)编辑 收藏

    Wap Explorer 图片预览

            前几天说要设计一个Wap浏览器的,经过上个礼拜天的设计,基本已经把UI的框架搭建出来了。不过对于wap的Wml解释器还没写,一来这方面比较难写,没有实践过,二来这几天公司有事情忙。所以就停了下来,不过趁着今天下午有空,我发些设计好的截图给大家看。

             在UI里我实现了对字体的控制已经对皮肤(所谓的皮肤只是换换颜色而已)的控制

    艾可惜只能发3个附件。

    posted @ 2006-12-30 09:06 路是爬出来的 阅读(131) | 评论 (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 路是爬出来的 阅读(127) | 评论 (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 路是爬出来的 阅读(419) | 评论 (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 路是爬出来的 阅读(544) | 评论 (0)编辑 收藏

    仅列出标题
    共5页: 上一页 1 2 3 4 5