BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX操作系统上使用Java 发信站: BBS 水木清华站 (Thu Jun 13 01:10:15 2002) 1 从QNX公司下在最新版的QNX操作系统,下载地点是: http://www.qnx.com/nc/download.qnx 2 下载文件qnxnc620.iso,这是一个CD-ROM映像文件。找一个CD刻录机 把这个文件里面的内容刻录到一张光盘上。注意了,不是把这个文件 拷贝到光盘上,是把这个文件里面的内容刻录到光盘上。如果你的机 器上安装了EasyCD的话,不要是用那个集成刻录环境,只要在文件浏 览器里面双击qnxnc620.iso文件就会直接激活EasyCD,然后你只要点 击OK然后等光盘烧好就可以了。 3 找一台可以从CD-ROM启动的机器,用新刻录的光盘启动该机器,安装 QNX 操作系统,最好是选择安装到一个独立的分区里面去。安装的过 程非常的简单,如果你不是傻蛋的话,应该不会碰到问题的。 4 文件拷贝完毕,系统提示你把光盘拿走,然后自动重新启动。用root 登陆进入系统,系统提示重新插入光盘,然后在Installer 选单里面 选中所有的两个文件包,继续进行软件安装。 5 应用程序安装完毕,GCC 也有了,MAKE也有了,JAVA也有了,不过现 在还得做一点小小的配置才能够开始用。 6 QNX采用的是IBM的J9虚拟机,是一个相当优秀的嵌入式Java虚拟机, 也是我所见过的速度最快的Java虚拟机。以前我在版面介绍过IBM 的 Visual Age for Java Micro Edition (VAME),里面用的就是这个J9 虚拟机,不过现在VAME改名叫WebSphere Studio Device Developer 了,当然东西还是这些。 7 J9虚拟机被安装在/usr/eclipse/ive下面。嗯,Eclipse, 忘了告诉 大家QNX 现在已经是Eclipse Consortium大家庭中的一员了,所以在 QNX 上也是可以用Eclipse的。 8 在/usr/eclipse/ive目录下面有一个bin和一个lib目录。进入bin 目 录看一下,当然有很多.so 文件,有一个j9是用来启动虚拟机的,就 好像是我们经常用到的java或者是javaw命令,还有一个j9c是用来编 译Java源代码的,就好像是我们经常用到的javac命令。 9 嘿嘿,从俺的晕倒死机器拷贝一个HelloWorld.class试一下。如果你 有网络的话,用FTP 就可以了。配置网络很简单的,在最左边的菜单 里面有一个网卡的图标旁边写着Network 几个大字,除非是你的网卡 不能够别区别,否则还是不要问我怎么配置了吧。当然,如果你的网 卡真的不能够被识别的话,到一边郁闷去吧,软盘还有么?mount 命 令应该还会用吧? 10 运行命令j9 HelloWorld: #j9 HelloWorld 嘿嘿,没有这个命令?嗯,看看PATH是什么? #echo $PATH 结果表明/usr/eclipse/ive/bin并不在系统PATH里面,那么我们把它 重新设置一下: #export PATH=$PATH:/usr/eclipse/ive/bin:. 最后那个点是很有用的,建议各位都加上,这样你就可以直接运行当 前目录下面的程序了,不用每次都敲入./MyCommand,怪烦的。 11 这回应该可以了吧?再来一次j9 HelloWorld。嘿嘿,没有找到库? 嗯,该检查一下LD_LIBRARY_PATH了。 #echo $LD_LIBRARY_PATH 结果表明/usr/eclipse/ive/bin并不在LD_LIBRARY_PATH里面, 当然 系统没有办法找到J9所需要的库了。咱们现在把LD_LIBRARY_PATH也 重新修改一下: #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/eclipse/ive/bin 好长啊!一定要注意拼对了呀,还有大小写也不能够写错。 12 再试一次,如果不work我就不用你了。 #j9 HelloWorld HelloWorld 嗯,真乖。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 修改:·qyjohn 於 Jun 13 01:19:11 修改本文·[FROM: 64.166.188.154] ※ 修改:·qyjohn 於 Jun 13 01:24:32 修改本文·[FROM: 64.166.188.154] ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.188.154]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX上使用Eclipse 发信站: BBS 水木清华站 (Fri Jun 14 06:57:27 2002) 1 下载并安装QNX操作系统,配置J9虚拟机。可以参考我在6 月13日贴 的文章《在QNX上使用Java》。比较好的方法是修改你的配置文件使 得你所设置的PATH和LD_LIBRARY_PATH能够保存下来。 利用ped修改配置文件.profile,加入下面几行: export J9_HOME=/usr/eclipse/ive export PATH=$PATH:$J9_HOME/bin:. 2 下载并安装Eclipse for QNX,下载地点: http://64.38.198.171/downloads/drops/S-M5-200204161340/ 建议选用Eclipse SDK for QNX,也就是这个文件: eclipse-SDK-20020416-qnx-photon.zip 3 将eclipse-SDK-20020416-qnx-photon.zip拷贝到/usr目录中进行解 压缩 #unzip eclipse-SDK-20020416-qnx-photon.zip 4 利用ped修改配置文件.profile,加入下面几行: export ECLIPSE_HOME=/usr/eclipse export PATH=$PATH:$ECLIPSE_HOME 5 下载J9虚拟机的插件,地址是: http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/ jdt-debug-home/plugins/org.eclipse.jdt.launching.j9/index.html 根据我们所下载的QNX的版本,选择20020409版本的插件,将其拷贝 到/usr/eclipse/plugins目录中并使用unzip解压缩。 6 使用eclipse命令启动Eclipse。 #eclipse 如果不行的话,需要检查你的PATH以及LD_LIBRARY_PATH是否已经设 置好了。 #echo $PATH #echo $LD_LIBRARY_PATH 如果你已经修改过了这些环境变量但是并没有看到新的值得话,你 也许需要重新启动一个session。 7 没有了,就这么简单。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.188.154]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 欢迎就QNX + Java系列文章展开讨论 发信站: BBS 水木清华站 (Mon Jun 24 10:53:30 2002) 写这一个系列的文章,主要是因为版面上讨论J2ME的朋友还不够多。 个人的感觉是很多网友或者是认为嵌入式应用比较高深,或者是认为 J2ME也就是给手机写个简单的小游戏的水平。总体的说来,大多数的 网友对J2ME均还处于道听途说的水平,没有什么实践的经验,并且也 还没有亲身去实践一番的想法。 这一系列文章想说明的,是嵌入式Java既不神秘,也不简单。它就象 是我们常用的Java标准版一样,是一个通过练习和实践就能够掌握好 的东西。之所以选择QNX 是因为这是目前最好的实时操作系统之一, 并且对嵌入式Java技术提供了最全面的支持。更为重要的是,对于开 发者来说,QNX 实时操作系统及其应用程序开发环境均是免费的,可 以不再顶着盗版的罪名来进行应用程序开发了。 目前的计划是全面的介绍QNX 和J9,然后逐步介绍一些我个人在这方 面的经验。由于在水木贴出来的是第一稿,文章里面不免会有很多地 方说的不够清楚不够全面甚至是错误的地方。我希望各位网友在有疑 问的时候尽量的在版面上提出来,一来有利于提高本版的讨论水平, 二来也有利于我将这些东西进一步整理和修改。如果有哪位网友希望 我能够具体的介绍一下某方面的技术(QNX + Java)的话,我也会尽我 个人的能力满足各位的要求。 谢谢各位对Java版长期的关心和支持。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.111.180]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (1.1) 发信站: BBS 水木清华站 (Sun Jun 23 13:47:41 2002) (第一稿,请毋转载到任何网站任何版面) 1.1 QNX 实时操作系统介绍 QNX 实时操作系统(QNX Real Time Operating System)是由位于加拿大渥太 华的QNX软件系统公司开发的一个针对嵌入式应用的微内核操作系统。QNX软 件系统公司成立于1981年,在过去的20多年中一直致力于微内核实时操作系 统的研究与开发。目前的QNX 实时操作系统已经发展成一个可以使用在严实 时应用中的高可靠性实时操作系统,能够运行在x86/Pentium, PowerPC, ARM, StrongARM, XScale, MIPS, SH-4等一系列硬件平台上,是在关键任务 应用中首选的两个实时操作系统之一(另外一个是VxWorks)。 QNX 是一个与电气工程师协会(Institute of Electrical and Electronics Engineers,IEEE)发表的便携式操作系统界面标准(Portable Operating System Interface, POSIX) 相兼容的实时操作系统。该操作系统提供了一系 列可裁剪的功能全面的高可靠性高性能组件,包括分布式计算,资源管理, 网络应用,图形窗口系统,文件系统,以及对Java的支持等等。此外,QNX还 是一个与Linux高度兼容的操作系统,由于gcc和gmake等Linux 平台上常用的 应用程序开发工具已经被移植到QNX 平台上,很多为Linux平台编写的应用程 序可以直接拿到QNX平台上编译运行。此外,QNX还提供了一个类似于Visual C++的应用程序集成开发环境,称为Photon Applicatioin Buider (PHAB)。 在这个集成开发环境里程序开发人员能够很方便的开发和调试基于图形用户 界面的QNX 应用程序。 更为重要的是,对于应用程序开发人员来说,QNX是一个完全免费的实时操作 系统。根据QNX软件系统公司发布的使用授权协议,在一个产品商业化之前应 用程序开发人员可以自由的使用QNX实时操作系统系统而无须向QNX 公司交付 任何软件使用费用。同样,QNX的应用程序集成开发环境PHAB对于软件开发人 员来说也是免费的。QNX 实时操作系统以及QNX应用程序集成开发环境均可以 从QNX公司的主页www.qnx.com下载。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.109.61]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (1.2) 发信站: BBS 水木清华站 (Mon Jun 24 06:17:37 2002) (第一稿,请毋转载到任何网站任何版面) 1.2 QNX 实时操作系统对Java语言的支持 QNX Neutrino使用IBM公司开发的业界领先的J9虚拟机为Java应用程序以及小 应用程序提供了支持。目前可供选择的方案有两个,一个是与J2ME标准完全兼 容的WebSphere嵌入式环境,另外一个是WebSphere客户环境,提供了一个可裁 剪的Java 2语言标准的子集。由于QNX 是一个多任务操作系统,因此可以同时 运行多个虚拟机为不同的应用程序提供服务。基于微内核的microGUI窗口界面 系统为AWT提供了全面的支持,在其它平台上开发的基于AWT的图形用户界面可 以不加修改的在QNX平台上运行。此外,QNX还通过使用本地线程保证了正确的 线程调度。 IBM公司开发的J9虚拟机通过了Modena JT++以及Plum Hall JVS 等一系列严格 的业界测试,是一个与J2ME标准完全兼容Java虚拟机。由于J9是一个专门为实 时的嵌入是应用开发的虚拟机,因此在其设计中对速度优化,内存管理,线程 管理,本地方法,垃圾回收,及时编译,可移植性以及可裁剪性能方面做了很 大的努力。根据多个公开发表的测试结果,J9虚拟机是目前运行速度最快的嵌 入式Java虚拟机。对本地方法的支持,使得应用程序开发人员能够直接控制外 围设备,调用实时操作系统的功能。J9虚拟机本身对内存的要求极少,用户更 可以通过一个配置工具使得应用程序在特定的嵌入式系统中对内存的要求降低 到最小。就象一般的Java应用程序一样,内存的分配和回收都是通过虚拟机来 自动管理的,因此在一般情况下不会产生内存泄露。此外,J9虚拟机还提供了 一个垃圾回收机制管理工具,使得用户能够在运行时刻控制和改变所使用的垃 圾回收机制。在线程管理方面,J9虚拟机直接使用底层实时操作系统所提供的 线程调度机制,从而保证了正确的代码能够在正确的时间被执行。高度可裁剪 的类库使得用户能够将应用程序所不需要的类和方法排除在嵌入式系统之外, 从而进一步节省了对系统存储空间的要求,也间接地提高了嵌入式应用程序的 执行速度。目前版本的J9虚拟机支持大多数流行的嵌入式软硬件平台,包括运 行在x86, MIPS, PowerPC, SH-4, 68K, SPARC平台上的Windows, Linux, QNX, Solaris, AIX, Pocket PC, Palm OS等操作系统。由于J9虚拟机卓越不群的表 现,它被Java Pro杂志评选为2002年度最佳嵌入式Java平台。同时,使用J9作 为Java平台的WebSphere Studio Device Developer (也就是以前的Visual Age for Java Micro Edition) 也被Java Pro杂志评选为2002年度最佳嵌入式开发 工具,又被Java World杂志评选为最佳Java设备应用程序开发工具。 值得一提的是,QNX 软件系统公司是Eclipse Consortium的发起者和最早的成 员之一。Eclipse 是由IBM 公司牵头开发的开放源代码的Java应用程序开发平 台,其目的是为应用程序开发人员提供一套完备的高度可裁剪的高性能软件开 发组件。Eclipse Consortium成立于2001年11月,目前已经拥有Borland, IBM, QNX, Red Hat, SuSE, Sybase, Rational等18个成员。由Eclipse Consortium 发布的Java应用程序集成开发环境Eclipse是完全免费的,可以运行在Windows, Red Hat Linux, SuSE Linux, Solaris, QNX和AIX等操作系统上。也就是说, 在QNX平台上也是可以使用集成开发环境Eclipse来开发Java应用程序的。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.110.36]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (1.3) 发信站: BBS 水木清华站 (Mon Jun 24 09:00:21 2002) (第一稿,请毋转载到任何网站任何版面) 1.3 QNX 实时操作系统以及集成开发环境的安装和配置 QNX实时操作系统的安装非常简单。首先你需要从QNX公司的网站下载最新版本 的QNX 操作系统,下载的地址是http://www.qnx.com/nc/download.qnx。目前 最新的版本是QNX 6.2,下载文件是qnxnc620.iso,这是一个CD-ROM映像文件。 将这个映象文件里面的内容刻录到一张光盘上,然后利用该光盘启动计算机即 可开始安装QNX 操作系统。总的来说安装的过程相当的简单,只需要选择启动 方式以及指定QNX 文件系统所在的位置即可。系统文件拷贝完成后将自动的重 新启动机器,然后需要用root登录进入系统并且自动安装其它应用程序。在一 台500 MHz + 128 MB的计算机上,安装过程通常都小于15分钟,相对来说还是 非常快的。系统安装完成后,即可直接使用PHAB以及gcc等程序开发工具, 但 是要使用Java还需要进行一点小小的配置。 J9虚拟机的缺省安装位置是/usr/eclipse/ive。在这个目录下有bin和lib两个 子目录,bin目录包含了J9虚拟机的可执行文件和所需要的库文件,lib目录则 包含了各种版本的Java类库。未来在QNX 系统上使用J9虚拟机,我们需要将合 适的目录包括在PATH和LD_LIBRARY_PATH 这两个环境变量中。我们需要修改用 户家目录(~)下面的.profile文件,使之包含如下语句: export J9_HOME=/usr/eclipse/ive export PATH=$PATH:$J9_HOME/bin:. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$J9_HOME/bin 应用程序集成开发环境Eclipse SDK for QNX可以从Eclipse Consortium的主 页下载,下载地址是http://www.eclipse.org/downloads/。将所下载的zip 文件拷贝到/usr目录中,然后使用unzip命令解压缩。然后你还需要下载针对 J9虚拟机的插件,下载地址是http://dev.eclipse.org/viewcvs/index.cgi/ %7Echeckout%7E/jdt-debug-home/plugins/org.eclipse.jdt.launching.j9/ index.html。你需要根据你所下载的Eclipse SDK for QNX的版本好选择一个 合适的插件,然后将下载的zip文件解压缩到/usr/eclipse/plugins目录中。 同样,我们需要修改用户家目录(~)下面的.profile文件从而将Eclipse 所需 要的路径和库路径包含在环境变量PATH和LD_LIBRARY_PATH中。 export ECLIPSE_HOME=/usr/eclipse export ECLIPSE_PLUGIN=/usr/eclipse/plugins/org.eclipse.swt/os/qnx/x86 export PATH=$PATH:$ECLIPSE_HOME export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ECLIPSE_PLUGIN 到此为止我们以及成功的安装与配置了QNX 实时操作系统以及相关的Java应 用程序开发工具。下面我们简单的介绍几个常用的命令: j9c – 类似于Java SDK中的javac命令,是用来编译Java源代码的。 j9 – 类似于Java SDK中的java命令,是用来运行Java应用程序的。 eclipse – 这个命令启动Eclipse for QNX应用程序集成开发环境。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.111.180]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (1.4) 发信站: BBS 水木清华站 (Mon Jun 24 12:33:20 2002) (第一稿,请毋转载到任何网站任何版面) 1.4 一个简单的Hello World程序 看到这里也许有的网友要开始发笑了,不就是一个Hello World么,还有什么 值得拿出来讲的?其实我刚才把1.3贴出去的时候就意识到这个问题了,我实 在是应该把它放在1.3的最后面的。不过现在没有办法了,就单独给一个小段 吧,在整理的时候会放到1.3里面去。 在没有开始写Hello World之前,也许我应该介绍一下QNX 上的文本编辑器。 vi也许大家都听说过吧,几乎是所有的类UNIX操作系统上都有这个东西,不 过现在似乎很多人对这种古老的编辑工具在某种程度上存在心理障碍。我对 vi没有什么心理障碍,不过我平时用的是pico。pico也有给QNX 的版本,不 过得自个下载安装才行。为了让这个介绍通俗一点,我们还是使用QNX 自带 的图形编辑界面吧,这个家伙叫做ped。 利用下面命令启动ped: #ped & 类UNIX的操作系统,其命令格式基本上是一样的。如果你对Linux熟的话, 转移到QNX 上工作基本上不会有任何问题的。在这里需要提醒一下新手, 如果你在启动一个带窗口的应用程序的时候加上一个& 号,那么就不需要 重新再开一个终端了。 下面是我们伟大的Hello World程序的源代码: public class HelloWorld { public static void main(String args[]) { System.out.println(“Hello World!”); } } 将该程序保存为HelloWorld.java,然后就可以进行编译了。在进行编译的 时候不需要退出编辑器(分特,我今天怎么这么八婆)。 使用j9c命令编译Java源代码: #j9c HelloWorld.java 使用j9命令运行Java应用程序: #j9 HelloWorld 需要注意的是,QNX 操作系统和Java语言都是大小写敏感的,所以一定要把 大小写都写对了。另外,对源代码进行编译的时候需要加上文件扩展名,在 运行一个Java应用程序的时候则不需要加上文件扩展名。如果排除了这几种 错误之后你仍然无法正确的编译或者是运行你的Hello World程序,请参考 1.3正确配置你的PATH和LD_LIBRARY_PATH。 //sigh 一个Hello World竟然也写这么多,真是浪费各位感情了。这些内容在进一步 整理的时候将被压缩到1.3中。今天可是要休息了,明天我会继续写一些关于 J9的具体介绍。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.111.180]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (2.1) 发信站: BBS 水木清华站 (Tue Jun 25 10:59:36 2002) (第一稿,请毋转载到任何网站任何版面) 2.1 J9C 编译器的使用 J9C 是J9虚拟机自带的字节码编译器,相当于标准版Java开发工具中的 javac 命令。这个编译器的用法如下: #j9c <编译选项> <源代码文件 | 目录名> 在J9C 编译器中可供选择的编译选项如下: -help 打印于编译有关的帮助信息 -version 显示编译器的版本号 -classpath 指定编译时刻使用的类路径,格式为: <dir 1>;<dir 2>;<dir 3> -d 存放字节码文件的目录名,如果这个没有指定一 个目标目录名,编译器将不生成源代码中所指定 的包目录结构 -d none 不生成字节码文件 -source 指定源代码的版本,可选的有1.3和1.4,缺省的 设置是1.4 -target 指定字节码文件的版本,可选的有1.1和1.2,缺 省的设置是1.1 -1.3 类似于-source 1.3选项,指定源代码与1.3版的 Java语言相兼容,这是编译器的缺省配置 -1.4 类似于-source 1.4选项,指定源代码与1.4版的 Java语言相兼容 -nowarn 隐藏编译器的警告信息 -warn: 设定编译器的警告水平,可供选择的警告水平如 下: constructorName 对与构造函数同名的方法提出警告 packageDefaultMethod 对试图覆盖包中缺省的方法的行为提出 警告 deprecation 对已经不提倡使用的方法或者成员提出 警告 maskedCatchBlocks 对隐藏的catch代码段提出警告 unusedLocals 对没有使用到的局部变量提出警告 unusedArguments 对没有使用到的方法参数提出警告 syntheticAccess 对试图访问内部类中的synthetic 成员 提出警告 assertIdentifier 对在源代码中使用assert标志符提出警 告 none 隐藏所有警告信息 示范使用方法:-warn:constructorName -g[:] 设定是否生成调试代码,可供选择的选项如下: -g: 生成所有调试信息 -g:none 不生成任何调试信息 -g:[line, var, source]选择性生成调试信息,例如生成某几行 或者是某些变量的调试信息 -preserveAllLocals 为了调试保存所有的局部变量 -noImportError 对import错误不提出警告 -log 将编译信息保存到指定的文件中 -proceedOnError 当遇到错误的时候继续进行编译,最后生成带 有错误方法的类文件 -verbose 在屏幕上详细显示正在编译的单元和已经编译 的单元 -referenceInfo 计算引用信息 -progress 显示编译进度(尽在-log模式下使用) -time 显示编译速度 -noExit 在编译介绍后不调用System.exit(n)方法,当 没有发生编译错误的时候n=0 -repeat 重复进行n次编译,仅供perf分析使用 注:以上内容均从j9c命令的帮助信息中翻译而来,如有不当之出,请 各位网友提出批评和建议。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.171.84.58]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (2.2) 发信站: BBS 水木清华站 (Tue Jun 25 11:41:50 2002) (第一稿,请毋转载到任何网站任何版面) 2.2 J9虚拟机的使用 和标准版Java开发工具相类似,可以使用j9命令启动J9虚拟机。这个命 令 的用法如下: #j9 <运行选项> 主类名称 [运行参数] #j9 <运行选项> -jxe:jxe文件 [运行参数] J9虚拟机的运行选项如下: -jxe:<jxe文件> 运行所指定的jxe文件 -jxespace:,, 为jxe文件指定所使 用的内存(十六进制) -jxeaddr: 从内存中直接运行一个jxe -cp: 将path指定为运行时刻所使用的类路径 -D= 在运行之前设定系统的环境变量 -debug: 在指定的端口启动JDWP调试服务器 -jcl:[:options] 指定所使用的JCL动态连接库 -verbose[:class,gc,dynload,stack,debug] 详细输出相关的调试信息 其中class和gc是缺省的选项 注:以上内容均从j9命令的帮助信息中翻译而来,如有不当之出,请各 位网友提出批评和建议。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.171.84.58]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (2.3) 发信站: BBS 水木清华站 (Tue Jun 25 14:02:38 2002) (第一稿,请毋转载到任何网站任何版面) 2.3 J9虚拟机上的标准类库 嵌入式应用程序和普通应用程序的最大的区别在于嵌入式应用程序处处 要受到目标平台的处理速度,内存大小以及存储空间的限制,而基于PC 的应用程序所受的限制则相对要小很多。基于以上考虑,所选择的虚拟 机必须在能够满足系统要求的情况下尽可能的少占用系统存储空间,经 过编译的字节码文件必须尽可能的以提高执行效率。因此,在嵌入是应 用程序的开发中,虚拟机的裁剪是提高系统整体性能的至关重要的一个 环节。 基于如上需求,J9虚拟机专门为不同的应用提供了不同的标准类库。这 些标准类库均提供了运行Java应用程序所必须的基本类,例如Java语言 中最基本的java.lang.Object和java.lang.String等等。一个完全版的 J9虚拟机通常包括如下标准类库: jclXtr – 这是一个极小型的类库,大约90 KB, 当你的存储空间 和内存极度紧张并且你能够容忍功能局限的情况下可以 考虑这一个类库(QNX 的缺省安装里面没有)。这个类库 提供了如下Java 2标准类库的一个子集: java.io – 没有Reader和Writer及其子类。 java.lang – 没有Double, Float, Math, Short类, 没有ThreadGroup构造函数以及方法。 不能够设定系统参数,在String 类中 不提供字符转换方法。 java.net – 没有datagram, multicast, socket factory等。 java.util – 没有Calendar, Dictionary, EventObject, EventListeners, ResourceBundle, TimeZone, Random, String Tokenizers, 等类库及其子类。Vector和Hashtable 类都是经过缩减的版本。 jclCldc – 这是J9虚拟机向资源极度紧张的目标平台所推荐的最小 配置,大约166 KB。在jclXtr类库中仅提供了最基本的 IO功能,在jclCldc 类库中则大幅度的增加了对IO以及 网络应用的支持,例如http, ftp, comm, datagram, file, serversocket, socket等。 这个基本类库所在的位置是$J9_HOME/lib/jclCldc jclCore – 这是一个为微小型设备设计的一个轻量级的基本类库, 它提供了基本的文件IO以及对网络应用的支持,大约占 用空间346 KB,是J9虚拟机为资源不太紧张的目标平台 所推荐使用的核心类库(所以叫做jclCore )。这个类库 包括了Java 2中如下包里面的大部分: java.io java.lang java.net java.util java.util.zip QNX 的缺省安装中不包括jclCore基本类库。 jclGateway – 这个基本类库是在jclCore基本类库的基础上构建的, 大约600 KB,主要的改进是提供了安全检查的功能。这 个类库除了jclCore 基本类库所包含的内容之外还提供 了如下包和类: java.net.URL包,但是不包括URLClassLoader包。 java.lang.SecurityManager包,但是不包括 java.security.acl包。 提供java.lang.Runtime.exec()方法。 完整的java.lang.reflect包。 QNX 的缺省安装中不包括jclGate基本类库。 jclMax – 这是一个专门为资源比较宽裕的目标平台所设计的基本 类库,大约2732 KB。这个基本类库里面包括了Java 2 里面的大多数包和类,包括 java.io java.math java.util java.lang java.net java.util.jar java.lang.ref java.text java.util.zip java.lang.reflect 此外,jclMax基本类库还基于如下包提供了Java 2风格 的安全检查功能: java.security java.security.interfaces java.security.acl java.security.spec java.security.cert com.ibm.oti.security.provider 这个基本类库所在的位置是$J9_HOME/lib/jclMax jclPersonal-- 这个类库提供了AWT, RMI以及对Java Bean的支持。QNX 的缺省安装中不安装这个类库,但是可以从IBM 的主页 上面下载。 注:以上内容基本上是根据Visual Age for Java Micor Edition 1.3 的文档整理出来的,目前版本的J9虚拟机已经有较大改动了。新的内容 将在本系列文章整理的时候添加进来。 另外,需要提醒大家一点,Webshpere Studio Device Developer 以及 Websphere Micro Environment目前仍然可以从IBM的主页免费下载。但 是根据我个人得到的消息,这些内容以后有可能不再会免费提供,所以 需要下载的网友请抓紧时间。下载地点是: http://www.embedded.oti.com/download/ 建议下载的内容: WebSphere Studio Device Developer 4.0 with WebSphere Micro Environment Windows (.exe) 122 MB WebSphere Studio Device Developer 4.0 with WebSphere Micro Environment Linux (.rpm) 140 MB DB2 Everyplace Windows (.exe) 22 MB MQSeries Everyplace Both (.zip) 22 MB 还有这里: http://www.embedded.oti.com/download/wsdd_su.phtml 建议下载的内容: Device Developer “WebSphere Custom Environment” Software Updates 这个包里面包含了上面所提到的jclPersonal类库,如果你需要AWT来做图 形界面的话,这个东西是必不可少的。 另外,如果你已经在QNX上面安装了Eclipse的话,你也可以使用SWT来构 建你的图形界面。这些内容将会在本系列文章的后面讲述。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.171.84.58]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 咪咪在克里特岛身无分文), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (2.4) 发信站: BBS 水木清华站 (Fri Jun 28 12:19:29 2002) (第一稿,请毋转载到任何网站任何版面) 2.4 一个从串口设备采集数据的简单程序 数据采集与处理是当前嵌入式应用的一个热点。在这种应用中,嵌入式系 统与各种各样各样的传感器或者是数据采集器等外接设备进行通讯,在其 内部对各种数据进行处理并向外接设备输出反馈信号。到目前为止,串口 通讯(主要是RS-232和RS-485)仍然是传感器与主机进行通讯的主流方式, 因此在一个嵌入式应用程序中,经常需要通过串口与串口设备进行通讯。 在标准版的Java语言中,串口通讯是通过扩展类库javax.comm来实现的。 由于这个扩展类库在标准的JDK 中并不提供,需要使用到串口通讯功能的 软件开发人员必须到IBM或者是Sun公司的网站去下载,在一定程度上影响 了这个扩展类库的普及和使用。J9虚拟机在设计上充分考虑到了嵌入式应 用的需求,在各个版本的标准类库中都提供了对串口通讯的支持。这些功 能被放在serial.jar这个包里面,可以在如下目录下找到: <J9_HOME>/lib/jclCdc/serial.jar <J9_HOME>/lib/jclFoundation/serial.jar 在QNX 系统上,J9虚拟机缺省的类路径(CLASSPATH)是jclMax标准类库, 也就是<J9_HOME>/lib/jclMax/classes.zip。也就是说,如果在程序中需 要用到串口通讯的时候,我们需要将serial.jar添加到虚拟机的类路径里 面去。在QNX系统上设置类路径的方法于Linux系统比较相似,只需要修改 .profile文件把新的CLASSPATH定义好就可以了。 export CLASSPATH=$J9_HOME/lib/jclCdc/serial.jar J9虚拟机缺省的类路径,也就是$J9_HOME/lib/jclMax/classes.zip 不需 要显式的定义。 serial.jar里面包含了很多用于与串口设备进行通讯的类,需要详细了解 的网友可以自行参考相关的文档。一般来说,于串口设备进行通讯需要经 过如下步骤: (1) 创建一个SerialConfiguration对象,然后根据特定设备的通讯 参数修改一下波特率等值。 (2) 创建一个SerialPort对象,在创建这个对象的时候需要使用到串 口的名称以及刚才创建好的SerialConfiguration。 (3) 利用SerialPort类的getInputStream() 和getOutputStream()方 法获得串口设备的输入输出流,通过该设备的输入输出流即可与 该设备进行通讯。 (4) 当不再使用这个串口设备的时候,利用SerialPort.close()关闭 与该设备的连接,同时释放所占用的系统资源。 在QNX 系统下,设备名被保存在/dev目录下,串口设备被起名为ser(n), 其中n是该串口设备的编号,从1 开始计数。例如/dev/ser1相当于晕倒死 系统上的COM1,/dev/ser2相当于晕倒死系统上的COM2。因此,虽然J9 虚 拟机在各个平台上都提供了对串口进行操作的包serial.jar,但是程序员 仍然需要考虑到在不同的平台上设备名是不一样的。 下面的示范程序演示了与串口进行通讯的一般过程。该程序与连接在ser1 的设备进行通讯,将该设备的输出信息打印到屏幕上。 import java.io.; import com.ibm.ive.serial.; public class SerialDemo { public static void main(String[] args) { // 构造SerialPortConfiguration对象并且配置通讯参数 SerialPortConfiguration SPC = new SerialPortConfiguration(); SPC.baudRate = 19200; SPC.dataBits = 8; SPC.stopBits = 1; SPC.parity = 0; try { // 构造SerialPort对象,构造成功以后系统已经与指定的设 // 备连接上了 SerialPort SP = new SerialPort("/dev/ser1", SPC); // 获得设备的输出并读取数据 InputStream DevIn = SP.getInputStream(); for (int i = 0; i < 10000; i++) System.out.println(DevIn.read()); // 关闭与串口设备的连接 SP.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } } 对上面这个示范程序进行编译的时候,由于程序中使用了jclMax标准类库 之外的类,所以需要在编译的时候指定类路径,也就是: j9c -classpath $CLASSPATH SerialDemo.java 在运行这个示范程序的时候,不需要再次显式的指定类路径,因为j9命令 会自己到系统的CLASSPATH里面去找: j9 SerialDemo 嗯,第一个嵌入式的Java应用程序到这里就大功告成了。在下面的一节中 将介绍一个比较复杂的应用程序:Honeywell HMR3000 地球磁场探测器的 驱动程序。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.111.141]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (2.5) 发信站: BBS 水木清华站 (Sat Jun 29 16:41:56 2002) (第一稿,请毋转载到任何网站任何版面) 2.5 Honeywell HMR3000地球磁场探测器驱动程序 <<山海经>>卷七<<海外西经>>记载:“奇肱之国在其北。其人一臂三目, 有阴有阳,乘文马。有鸟焉,两头,赤黄色,在其旁。”晋代张华著<<博 物志 外国>>曰:“奇肱民善为拭扛,以杀百禽。能为飞车,人风远行。 汤时西风至,吹其车至豫州。汤破其车,不以视民。十年东风至,乃复作 车遣返。”这里所提到的飞车,是人类历史上最早见于文字的航天航空工 具之一。在这里我们且不计较这里所提及的奇肱民究竟是地球上土生土长 的史前人类还是来自另外一个世界的外星人,我们所关心的,是奇肱民高 超的导航与控制技术。 随着现代交通工具的不断发展,导航与控制技术也成为精密仪器,自动控 制,土木工程以及计算机等多个学科的研究热点。导航与控制技术中的关 键问题,则是如何实时的获得交通工具的位置,速度,加速度等信息。在 航天技术中,昂贵笨重的惯性导航仍然是目前唯一可行的解决方案。在地 面车辆,舰船以及飞机上,则以经开始逐步过渡到价格便宜量又足的替代 方案:全球定位系统(GPS) + 惯性测量单元(IMU) + 地球磁场探测器。在 这一节里面要讲述的就是一个高精度的地球磁场探测器的驱动程序。 地球磁场探测器的功能是测量地球磁场磁力线与该探测器中轴线之间的夹 角,从而得到运动器(例如近地飞行器,地面车辆,船只与舰艇)当前的航 向信息。除了地球磁场探测器之外,也可以通过IMU和GPS的输出信号计算 出运动器的航向。但是,高精度的IMU 往往非常的笨重与昂贵,在民用范 围里面推广使用的困难很大。GPS 虽然是一种非常经济的手段,但是在其 信号要受到多路径反射,多普勒频移,建筑物遮挡以及天气状况等多个因 素的影响,并且计算出来的航向信息仅在运动器的速度较大的情况下才是 准确的。相比较而言,地球磁场探测器所得到的数据所受到的外界干扰比 较小,并且价格比较便宜,所以是一种被广泛使用的解决方案。 由Honeywell公司生产的HMR3000地球磁场探测器就是这样一个面向民用市 场的高精度地球磁场探测器。这个产品本身就是一个独立的嵌入式设备, 该设备带有自己的微处理器,能够在其内部将探测到的地球磁场数据进行 处理,然后通过串口将运行器的航向,翻滚角和俯仰角等信息发送给主机 以计算导航解。通常来说,地球磁场探测器会被安装在飞机,轮船和车辆 等运动器的中轴线上,因此探测器周围的磁场会被运动器本身的金属材料 所扭曲,导致测量到的航向并不能够真实的反应出运动器的航向。因此, 当一个地球磁场探测器被安装到一个新的运动器上或者是运动器上运载了 大量有可能影响到局部磁场的金属材料时,必须对地球磁场探测器进行必 要的校正以保证测量结果的正确性。 踪上所述,Honeywell公司的HMR3000地球磁场探测器有三中运行模式,如 下: (1) 正常模式 – 测量地球磁场向量并且计算运动器的航向信息 (2) 停止模式 – 不测量地球磁场向量,输出记忆体里面的航向信息 (3) 校正模式 – 对传感器进行校正 由于HMR3000 地球磁场探测器具有一个独立的微处理器,主机可以通过串 口向探测器发送命令改变其运行模式和监控探测器当前的运行状况。常用 的控制和查询命令如下: (1) 正常模式 – #FA0.3=126 (2) 停止模式 – #FA0.3=027 (3) 强制重启 – #F33.6=152 (4) 校正模式 开始校正 – #F33.4=051 查询进度 – #I26C?31 保存结果 – #F2FE.2=167 正常工作 – #F33.4=150 HMR3000 地球磁场探测器的校正过程非常简单,只要利用上面的命令将探 测器切换到校正模式,然后慢慢将该探测器旋转360 度即可。这个过程应 该很慢的进行,推荐的时间是2 到3 分钟。在旋转过程中可以利用进度查 询命令查询当前的校正进度,探测器将返回一个格式为#nnnnhh 的字符串,如果nnnn的值大于275 则可以命令探测器保存结果并返回正常 工作模式了。 在一般情况下,HMR3000 地球磁场探测器的通讯参数是19200, 8, 1, 0。 根据以上信息,我们基于J9虚拟机所提供的标准类库为HMR3000 地球磁场 探测器设计了一个简单的驱动程序。这个驱动程序是一个Java类,类名称 为HMR3000,该类包含如下方法以及内部类: HMR3000(String port) 构造方法,指定HMR3000 地球磁场探测器所在的串口设备名称。 connect() 与HMR3000 地球磁场探测器建立连接。 disconnect() 断开与HMR3000 地球磁场探测器的连接。 start() 将HMR3000 设置为正常工作模式,同时启动数据采集线程。 stop() 将HMR3000 设置为停止工作模式,同时终止数据采集线程。 reset() 强制性重新启动HMR3000 地球磁场探测器。 calibrate() 对HMR3000 地球磁场探测器进行校正。 CollectData 这是复杂进行数据采集的线程,由驱动程序自动调用。 getHeading() 向外部应用程序返回运动器当前的航向信息。 下面是HMR3000 地球磁场探测器驱动程序的源代码,由于受到公司有关条 款的限制,这里仅能够提供一个功能比较简单的版本。需要利用HMR3000 地球磁场探测器实现高精度导航与控制应用的网友,可以参考本驱动程序 以及HMR3000 的用户文档轻易的改写本驱动程序以满足你的特别要求。 /** * * HMR3000.java * * 基于J9虚拟机的HMR3000 地球磁场探测器驱动程序,可以在Windows, * Linux, Pocket PC, QNX等任何有J9虚拟机支持的平台上使用。 * * 作 者: qyjohn@SMTH * 创建时间: 2002-06-21 * / import java.io.; import com.ibm.ive.serial.; public class HMR3000 { protected int BufferSize; protected String Port; protected SerialPort Device; protected BufferedReader DeviceIn; protected OutputStream DeviceOut; protected float Heading; protected boolean available; protected boolean running; protected boolean calibrate; /** * * 构造方法. * * @param port - 指定HMR3000 所在的串口设备名称. * / public HMR3000(String port) { Port = port; BufferSize = 3000; } /* * * 这个方法打开HMR3000 所在的串口,并设定其通讯参数。串口 * 成功打开之后获得串口设备的输入输出流。缺省的数据缓冲区 * 大小是3000字节。 * / public synchronized void connect() { try { // 构造一个SerialPortConfiguration对象 SerialPortConfiguration SPC = new SerialPortConfiguration(); SPC.baudRate = 19200; SPC.dataBits = 8; SPC.stopBits = 1; SPC.parity = 0; // 构造一个SerialPort对象,同时获得串口的输入输出流 Device = new SerialPort(Port, SPC); DeviceIn = new BufferedReader(new InputStreamReader( Device.getInputStream()), BufferSize); DeviceOut = Device.getOutputStream(); available = true; } catch (Exception e) { System.out.println(“Error when opening the serial port.”); System.out.println(e.getMessage()); available = false; } notifyAll(); } /* * * 这个方法关闭与HMR3000 所在的串口并且释放所占用的系统资源。 * / public synchronized void disconnect() { try { DeviceIn.close(); DeviceOut.close(); Device.close(); } catch (Exception e) { System.out.println(“Error when closing the serial port.”); System.out.println(e.getMessage()); } running = false; available = false; notifyAll(); } /* * * 这个方法将HMR3000 设置为正常工作模式。 * / public synchronized void start() { String MsgOut = "#FA0.3=126" + (char) 13 + (char) 10; byte b[] = MsgOut.getBytes(); try { running = true; DeviceOut.write(b); new CollectData().start(); } catch (Exception e) { System.out.println(“Error when starting the HMR3000.”); System.out.println(e.getMessage()); } notifyAll(); } /** * * 这个方法将HMR3000 设置为停止模式。 * / public synchronized void stop() { String MsgOut = "#FA0.3=027" + (char) 13 + (char) 10; byte b[] = MsgOut.getBytes(); try { running = false; DeviceOut.write(b); } catch (Exception e) { System.out.println(“Error when stoping the HMR3000.”); System.out.println(e.getMessage()); } notifyAll(); } /** * * 这个方法强制重新启动HMR3000。 * / public void reset() { String MsgOut = "#F33.6=152" + (char) 13 + (char) 10; byte b[] = MsgOut.getBytes(); try { DeviceOut.write(b); Thread.sleep(3000); } catch (Exception e) { System.out.println(“Error when performing force reset.”); System.out.println(e.getMessage()); } } /** * * 这个方法对HMR3000 进行校正。 * / public synchronized void calibrate() { // 首先停止数据采集线程。 running = false; notifyAll(); // 准备在校正过程 中所需要用到的各个命令 String InLine = " ", Data = " "; String CalCmd = "#F33.4=051" + (char) 13 + (char) 10; String ChkCmd = “#I26C?31" + (char) 13 + (char) 10; String SavCmd = "#F2FE.2=167” + (char) 13 + (char) 10; String OprCmd = "#F33.4=150" + (char) 13 + (char) 10; byte CalB[] = CalCmd.getBytes(); byte ChkB[] = ChkCmd.getBytes(); byte SavB[] = SavCmd.getBytes(); byte OprB[] = OprCmd.getBytes(); calibrate = true; try { // 发送校正命令 DeviceOut.write(CalB); while (calibrate) { // 不断检测校正进度 DeviceIn.skip(BufferSize); DeviceOut.write(ChkB); for (int i=0; i < 20; i++) { InLine = DeviceIn.readLine(); if ((InLine.length() > 5) && (InLine.charAt(0) == ‘#’)) { Data = InLine.substring(1, InLine.indexOf("*")); if (Data.equals(“275”)) calibrate = false; } } Thread.sleep(1000); } // 保存校正结果并将探测器重置为正常工作状态 DeviceOut.write(SavB); DeviceOut.write(OprB); } catch (Exception e) { System.out.println(“Error while performing calibration.”); System.out.println(e.getMessage()); } // 重新启动数据采集线程 running = true; notifyAll(); new CollectData().start(); } /** * * 向外部程序提供当前的航向信息。 * / public float getHeading() { return Heading; } /* * * 数据采集线程。 * / class CollectData extends Thread { public void run() { String InLine = " "; String Data = " "; String Header = “$HCHDG,”; int HeadLen = 7; while(available && running) { try { InLine = DeviceIn.readLine(); if (InLine.indexOf(Header) > -1) { Data = InLine.substring( HeadLen, InLine.indexOf(’,’, HeadLen)).trim(); if (Data.length() != 0) Heading = Float.parseFloat(Data); } catch (Exception e) { System.out.println(“Error while parsing HMR3000 data.”); System.out.println(e.getMessage()); } } } } } /* * * 测试程序 * */ public static void main(String[] args) { try { HMR3000 device = new HMR3000("/dev/ser1"); device.connect(); device.start(); Thread.sleep(10000); device.reset(); Thread.sleep(3000); device.stop(); device.disconnect(); } catch (Exception e) {} } } – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.171.79.116]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (3.1) 发信站: BBS 水木清华站 (Wed Jul 3 11:20:42 2002) (第一稿,请毋转载到任何网站任何版面) 3.1 基于AWT的图形用户界面 经过前面两个星期的介绍,我想各位现在应该对QNX 平台以及IBM 的J9 已经非常熟悉了。就我个人了解到的信息,我们版面上已经有不少朋友 下载并安装了QNX 实时操作系统。如果不出意外的话,应该有相当一部 份网友已经开始尝试着给QNX 系统编写Java程序了吧。 我想一定会有朋友急着问:怎么做图形用户界面啊?我怎么到处都找不 到AWT和SWING啊? 嗯,图形用户界面确实也是嵌入式应用程序中很重要的一部份。QNX 有 者目前功能最强大的微内核图形界面系统,如果在我们的Java应用程序 中不能够使用它那简直就亏大了。所以,我们从今天开始会花3 到4 个 小节的时间来介绍如何在我们的Java应用程序中使用图形用户界面。 对嵌入式Java比较熟悉的朋友一定知道目前大多数的嵌入式虚拟机都提 供了对AWT 的支持。例如Sun公司开发的Personal Java,Insignia公司 开发的Jeode,Nsicom公司开发的CrEme,还有PERC公司开发的Perc,当 然还包括我们正在介绍的IBM J9。就我个人所了解的情况,Nsicom公司 开发的CrEme 是目前唯一的一个支持Swing 的嵌入式Java虚拟机。关于 为什么在嵌入式Java中普遍使用AWT而不使用Swing的问题,我们会在这 一章的适当位置进行讨论。 根据我们在2.3 节中的介绍,J9虚拟机在jclPersonal 标准类库中提供 了对AWT的支持,但是在QNX的缺省安装中并不包括这个类库。因此,我 们需要从J9的新家WebSphere Studio Device Developer (也就是原先 叫做Visual Age for Java Micro Edition的)中获得这个类库。 首先我们必须从IBM 的网站下载WebSphere Studio Device Developer, 下载的地址是www.ibm.com/software/ad/embedded/。这是IBM公司基于 Eclipse开发的嵌入式Java集成开发环境,如果你以前用过Visual Age for Java或者是Eclipse的其它版本的话,想来应该很容易的就能够上 手。WSDD有两个版本,一个是给晕倒死的,一个是给利怒死的,看你的 开发平台挑一个合适的吧。问题是在这个标准版的WSDD中既不包括QNX 平台的运行环境,也不包括我们所需要的jclPersonal 类库,所以我们 还要下载WSDD的Software Updates。QNX 平台的运行环境在Runtime Software Updates中,jclPersonal库在Custom Environment Software Updates中,所以这两个update我们都要下载。 首先安装WSDD,将下载来的Software Updates解压到一个临时目录下, 然后启动WSDD。从主菜单选取Help → Device Developer Updates。 点击Add或者是Update All,在随后跳出来的对话框里面选Local Predefined Locations。在最下面的Location一栏里面填上你所需要安 装的Update,格式为file:/,例如: file:/c:/temp/wsddupdates/wsdd/4.0/runtimes/ file:/c:/temp/wsddupdates/wsdd/4.0/wce/ 写完了这些按一下Add按钮,然后选中你需要安装的Update,然后机器 就自己瞎忙,过一小会就忙完了。个人的建议是先安装Runtime的,然 后再安装WCE,不然的话会后悔的。安装完了以后在下面这个目录找到 QNX 的jclPersonal类库prsnlqnx.jar: wsdd/wsdd4.0/ive/runtimes/qnx/common/ive/lib/jclMax/ 如果你的QNX 和晕倒死或者是利怒死主机是两台独立的计算机的话,你 可以通过网络或者是其它的可移动存储设备将prsnlqnx.jar拷贝到你的 QNX 系统上。如果你的QNX 和晕倒死或者是利怒死主机是安装的同一台 计算机的不同硬盘或者是同一块硬盘的不同分区上的话,你也许会感谢 我告诉你下面这个小窍门: 启动QNX,进入文件管理器,进入/fs目录看看有什么东西没有。嘿嘿, 一不小心看见了其它的硬盘(分区)是不是是。如果还没有看到你想要的 东西的话,看看mount命令的帮助吧。等你看到/fs里面出现了你的硬盘 的时候,如果你还不知道怎么做就是大猪头了。 将prsnlqnx.jar文件放到/usr/eclipse/ive/lib目录下,然后修改类路 径,最好是在~/.profile文件里面改: export CLASSPATH=$CLASSPATH:/usr/eclipse/ive/lib/prsnlqnx.jar OK,现在你应该已经有了AWT了,下面咱们写一个Hello AWT吧: import java.awt.; import java.awt.event.; public class HelloAwt extends Frame { public HelloAwt() { Label label = new Label(“Hello AWT!”); add(Label); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } } public static void main(String[] args) { HelloAwt hello = new HelloAwt(); hello.setTitle(“I Love Java!”); hello.pack(); hello.setVisible(true); } } 使用下面的命令编译: #j9c -classpath $CLASSPATH HelloAwt.java 使用下面的命令运行: #j9 HelloAwt 嗯,就是这么简单。在QNX 上的图形用户界面跟偶们平时在晕倒死或者 是利怒死系统上做的完全一模一样。也就是说,我们在其它平台上编写 的基于AWT 的图形用户界面可以不加改动的移植到QNX 平台上来了。至 于AWT 的问题,就不用我多说了吧,在javasoft的网站上有一个完整的 教程,可以从这个地址下载: http://java.sun.com/docs/books/tutorial/information/ download.html#OLDui 这一节就到这里为止吧,偶肚子饿了。下一节是基于SWT 的图形用户界 面,下下一节是基于MicroView的图形用户界面。不过MicroView似乎已 经用的人不多了,所以考虑删掉,直接讲AWT和SWT的比较。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.171.76.196]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (3.2) 发信站: BBS 水木清华站 (Fri Jul 5 03:59:38 2002) (第一稿,请毋转载到任何网站任何版面) 3.2 基于SWT的图形用户界面 Eclipse 项目的发布在IT界可以说是一次震撼,这不仅仅是因为IBM 公 司无偿公开了花费4000万美元开发出来的一整套代码,也不仅仅是因为 支持这个项目的包括目前在市场上相当吃香的Rational, Borland, Red Hat以及QNX等公司。最让人吃惊的是:Eclipse 项目的矛头直接针对的 是IBM公司最亲密无间的Java夥伴-- Sun公司。就象Eclipse这个名字所 意味的那样,IBM 的目的是要建立一套各种程序设计语言都能够使用的 模块化的开发平台,并且希望它能够成为一个业界公认的标准平台。说 的通俗一点,就是IBM 又想当老大了。 Eclipse项目中最令人震撼的一点是它用称为SWT的的图形库和工具包取 代了Java标准中的AWT和Swing。根据Eclipse项目的解释,SWT直接调用 了操作系统的图形库,从而使得Java应用程序的Look & Feel 与操作系 统的习惯完全一致;更为重要的是,对本地方法的直接调用大幅度的提 高了基于SWT 的Java应用程序的运行速度。关于SWT与AWT/Swing的优点 和缺点我们将在下一节中进行比较和讨论,在这一节中我们先介绍如何 在QNX 系统上构建基于SWT 的图形用户界面。 首先我们需要做一点必要的配置,如下: (1) /usr/eclipse/plugins/org.eclipse.core.runtime/runtime.jar 是Eclipse平台的运行库,需要将它放到类路径里面。 (2) /usr/eclipse/plugins/org.eclipse.ui/workbench.jar是Eclipse 平台的图形界面库,需要把它放到类路径里面。 (3) /usr/eclipse/plugins/org.eclipse.swt/ws/photon/swt.jar里面 是SWT 的基本类库,需要将它放在类路径里面。 (4) /usr/eclipse/plugins/org.eclipse.swt/os/qnx/x86 这个目录下 面存放的是SWT 与本地方法的接口,需要放在LD_LIBRARY_PATH里面。 修改.profile文件,如下: export CLASSPATH=$CLASSPATH:/usr/eclipse/plugins/org.eclipse.core.runtime/runtime.jar export CLASSPATH=$CLASSPATH:/usr/eclipse/plugins/org.eclipse.ui/workbench.jar export CLASSPATH=$CLASSPATH:/usr/eclipse/plugins/org.eclipse.swt/ws/photon/swt.jar export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/eclipse/plugins/org.eclipse.swt/os/qnx/x86 改动过这些设置以后,最简单的办法是重新启动Photon来让这些新的设 置生效。 通常来说,构建一个基于SWT 的图形用户界面需要经过如下步骤: (1) 创建一个Display对象,该对象代表一个SWT 进程(session)。 (2) 创建一个或者是多个Shell对象,一个Shell对象相当于我们在Awt 或者是Swing里面所说的顶极容器,也就是应用程序的主窗口。 (3) 在Shell对象上面创建用户所需要的控件。 (4) 初始化所有的控件,包括大小和初始值等,为控件的事件注册必要 的监听器Listener。 (5) 打开主窗口。 (6) 启动事件处理循环,一直到用户结束程序的运行。 (7) 垃圾回收。 下面是一个简单的基于SWT 的Java应用程序HelloSwt: import org.eclipse.swt.widgets.*; import org.eclipse.swt.SWT; public class HelloSwt { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); Label label = new Label(shell, SWT.CENTER); label.setText(“Hello SWT!”); label.setBounds(shell.getClientArea()); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } 使用下面的命令编译: #j9c -classpath $CLASSPATH HelloSwt.java 使用下面的命令运行: #j9 HelloSwt 嗯,看起来是不是跟基于Awt/Swing 的图形用户界面不太一样啊?更为 重要的是,是不是能够明显的感觉到HelloSwt的启动速度比HelloAwt明 显要快很多呢?QNX 的微内核图形界面系统当然是提高用户应用程序运 行速度的一个方面,但是更重要的是SWT 直接调用了QNX 的微内核图形 界面系统的功能,而AWT 则没有利用到操作系统所提供的这些优势。 SWT 是一套与AWT/Swing 完全不同的图形界面系统,新接触SWT 的程序 员还是需要花费一段时间来熟悉SWT的结构和API。下面推荐的几个参考 资料能够让你轻松的开始利用SWT 进行图形用户界面设计: The Programmer’s Guide for Eclipse, 这是Eclipse项目发布的官方 程序员手册,其PDF 版可以从这个地址下载: http://www.eclipse.org/documentation/pdf/ org.eclipse.platform.doc.isv.pdf 这份文档也可以从这个网站联机查看: http://download.eclipse.org/downloads/documentation/2.0/html/ plugins/org.eclipse.platform.doc.isv/ 另外,www.eclipse.org最近在其网站上发布了关于SWT的结构及其应用 的一系列文章,也非常的有参考价值。如果有感兴趣的网友,请自行到 Eclipse 的网站查看。 – ("-''-/").___..--''"
-._ 云与清风常拥有, 6_ 6 )
-. ( ).-.__.
) 冰雪知音世难求。 (Y.)’ ._ ) ._
. ``-…- 击节纵歌相对笑, …`–’…-/ /–’.’ ,’ 案上诗书杯中酒。 (il),-’’ (li),’ ((!.-’ 2000.12.31 ___________________________________________________________________ ※ 修改:·qyjohn 於 Jul 5 04:15:28 修改本文·[FROM: 64.166.111.85] ※ 修改:·qyjohn 於 Jul 5 04:26:13 修改本文·[FROM: 64.166.111.85] ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 64.166.111.85]
[返回上一页]
BBS 水木清华站 – 精华区文章阅读
发信人: qyjohn (Sweet Potato – 爱你,咪咪), 信区: Java 标 题: 在QNX平台上开发Java应用程序 (3.3) 发信站: BBS 水木清华站 (Fri Jul 5 08:03:13 2002) (第一稿,请毋转载到任何网站任何版面) 3.3 关于AWT和Swing的一点讨论 昨天晚上重读郑振铎先生所著<<插图本中国文学史>>,在<<魏与西晋的 诗人>>这一章读到如下几句,思考良久。" 论者平潘岳,潘尼,每以岳 为高出于尼远甚。实则岳唯哀悼之诗最为杰出耳。岳字安仁,荥阳中牟 人。美姿仪。少时每出,妇人掷果满车。善属文,清绮绝世。举秀才为 郎。后迁给事黄门侍郎。" 在这里我们看到潘岳虽然在文学成就上比不 上潘尼,但是由于潘岳长的比较帅,所以后人在评价这两个人的时候通 常都会偏袒于他。“少时每出,妇人掷果满车”,真是好一个帅哥,想来 我妹皮皮读到这里的时候一定会欢喜赞叹满心仰慕吧。 事实上在我们程序设计这个行当也是一样,在用户的眼光里,一个吸引 人的图形用户界面远远要比一些强大的功能要受欢迎得多。即使是我们 这个行业的从业人员,有很多已经忘记了或者是从来都没有听说过" 在 图形界面后面不是图形界面" (Hehind GUI is no GUI)这样一个道理。 因此,为了帮助各位希望在嵌入式应用领域成功地卖身丧犬的朋友,我 觉得有必要在这里对嵌入式Java的各种图形界面系统进行一些简单的讨 论。 在3.1 中我们提到了目前大多数的嵌入式Java虚拟机都提供了对AWT 的 支持但是不提供对Swing 的支持。但是,在标准版的Java平台上Swing 才是推荐使用的图形界面系统,在Sun 公司所提供的Java Tutorial 中 甚至把基于AWT 的图形用户界面设计这一部份从其网站中删除,需要利 用到AWT 进行图形用户界面设计的用户只有将该部份下载到本地硬盘才 能够使用这部份教程。在标准版Java中正值春风得意的Swing 为什么到 了嵌入式应用中便不再吃香了呢? AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写。根据商务 印书馆1998年修订的<<现代汉语词典>>中对抽象一词的解释之第2 条, 抽象是不能具体经验到的,笼统的,空洞的。也就是说,我们不能够明 确的知道这个被称为AWT 的家伙究竟在干什么。根据Sun 公司所提供的 一点点微不足道的信息,我们大概的知道AWT 提供了一套与本地图形界 面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之 间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供 的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一 个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语 言所宣称的"一次编译,到处运行"的概念,AWT 不得不通过牺牲功能来 实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操 作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功 能的,我们