编译和运行leJOS NXJ程序



编译和运行leJOS NXJ程序

这一章节将介绍如何编译和运行leJOS NXJ程序。

很多人都想写个Java程序,然后在NXT里运行,但这并不是唯一的选择。leJOS NXJ也支持在PC机上的程序,用来远程控制NXT机器人。这样的程序,可以控制在NXT上的leJOS NXJ菜单程序。同时,还能控制在NXT上的标准乐高固件里的程序。更有意思的是,leJOS NXJ还支持部分程序在PC上,部分程序在NXT上,然后两者可以通过蓝牙或者usb互相通讯。在PC上的程序,可以利用PC上的内存容量和CPU进行复杂的计算和数据处理。不仅如此,还能显示一些有意思的东西,比如说一个你的机器人探索后的地图。运行在NXT上的程序,主要用来对传感器作反应,以及对于马达的控制。如果你对于PC上的程序感兴趣,可以查看这里的 API(PC API command line tools)

在讨论这个话题的时候,值得一提的是,leJOS NXJ程序也支持在移动电话或其他便携设备上运行,只要该设备有JME(Java MicroEdition Environment, Java针对移动设备,手机等小型设备的运行环境)。这些程序可以通过蓝牙和NXT进行通讯,我们即将添加针对JEM的leJOS NXJ的API介绍。

最终的情况是,leJOS NXJ程序是可以分布在多个NXT盒子中,然后通过蓝牙或RS485协议(需要NXT连接线,把NXT的4号端口连接起来)进行通讯。NXT程序也能和手机及其他设备进行通讯,比如说带有蓝牙传输的GPS信号接收器。这些通讯都在通讯这个章节里介绍到。

尽管如此,我们要从编写在NXT盒子上运行的程序开始。你可以选择用命令行工具来编译,上传程序,或者选择一个集成的可视化开发工具。

虽然命令行工具很强大,但你最好还是使用一个可视化的开发工具。这些工具都带有语法高亮/提示 的编辑器,能够帮助你第一时间发现语法错误。而不是等到编译的时候在发现。同时,具备了彩色语法高亮,自动格式化代码,自动提示方法或函数,扩展/收拢代码块,以及其他好多方便的功能。使得你的开发过程更加便捷,而且更有乐趣。可视化开发工具的好处远不止这些,可以用来创建/编辑整个工程,调试,文档自动生成,以及用户界面的绘制。Java的可视化开发工具继承了Sun Java的工具以及很多第三方的工具,使得使用起来很方便,而且对于插件和扩展的使用也很方便。

可视化开发工具很容易安装配置和使用,你要做的是任何时候都要使用开发工具来管理项目,甚至是一个很小的程序。任何类型的(NXT端或PC端)程序都可以用IDE来创建,你可以用任意的Java IDE来开发leJOS NXJ程序。本手册目前就介绍了2种最流行的IDE,分别是Eclipse和Netbeans。还有专门针对leJOS NXJ的插件,可以更加方便的使用这2个开发工具。

你可以查看下面2个章节来学习,如何使用IDE开发工具编译,运行leJOS NXJ程序。

这一章节将知道你如何使用命令行工具来编译和执行。如果你选择这样做,那么你可以挑选一个你常用的编辑器来编写代码,实际上,大部分程序编辑器是可以直接调用这些编译,连接命令的。ant是编译和运行leJOS程序的另一个选择。很多可视化开发工具里也用到ant,比如Netbeans里所有的编译过程都是用了ant来完成的,Eclipse也可以这样。实际上,你也可是使用ant的命令行模式,所有的例程都提供了相应的ant编译脚本(xml格式的)。如果你需要用ant来编译,只需要在进入build.xml所在的目录,然后执行ant命令就可以了。

根据你选择的操作系统的不同,下面文章里提及的脚本,有可能是windows下的.cmd和.bat格式,也有可能是unix的shell脚本。NXJ需要的一些路径,比如class path和library path都需要用这些脚本来配置,然后你就可以调用java class来完成其他所有工作了。有一个特例,就是nxjc,这个命令只是简单的调用了javac这个命令。

返回顶部

使用LeJOS NXJ命令行工具

leJOS使用Sun公司的标准Java编译器来编译程序。尽管如此,需要使用leJOS自带的classes.jar来替代标准Java带的库。为此,我们提供了nxjc这个工具来设置新的classes.jar的运行路径。这个命令接收的参数,和javac一样。和其他Java程序不一样的是,leJOS的java程序,不支持类的动态载入。所以,需要把程序中使用到的所有的类都分装打包到一个二进制文件,以nxj结尾。这个分装的过程,被称为链接,链接之后的二进制文件就可以上传到NXT里去运行了。

下面的命令分别用来编译,链接和上传:

  • nxjc
  • nxjlink
  • nxjupload
  • nxj

需要注意的是,一般情况下,你只需要使用nxjc和nxj这2个命令。因为nxj命令相当于nxjlink和nxjupload两个命令。运行这些命令的时候,你需要打开一个命令行窗口。

nxjc – 用来编译java源文件

编译一个或多个Java源文件

使用方法: nxjc <java-文件名>

范例:

nxjc View.java

nxjc在调用javac的时候,带了下面的参数:

  • -bootclasspath <classes.jar的路径>
  • <java-文件名>

因为leJOS需要使用自己的classes.jar,所以要加上-bootclasspath这个参数。

返回顶部

nxjlink – 链接目标程序

调用leJOS的链接程序

使用方法: nxjlink [-v|--verbose] [-g|--debug] [-a|--all] main-class –o <binary>

范例:

nxjlink -v Tune -o Tune.nxj

用来链接指定的主程序所在的类,以及被引用到的其他在当前目录的Java类。并和标准的leJOS类链接生成可以被上传并运行的二进制NXJ程序。

-v或者--verbose参数,用来显示二进制文件里包含的类名和方法,这个输出对于调试程序很有用。

-g或者--debug参数,用来编译可调试的二进制文件。这样的文件可以被中断(用回车+空格),中断之后,会打印出异常时候的系统堆栈。

链接程序会自动去除未被使用到的方法,如果你想保留,可以加上参数-a或者--all,但是保留下来也没什么用。

-h或者--help参数是用来显示帮助信息的。

返回顶部

nxjupload – 上传一个程序

使用方法: nxjupload [-b|--bluetooth] [-u|--usb] [-d|--address address] [-n|--name name] [-r|--run] <binary>

范例:

nxjupload Tune.nxj

上传二进制的.nxj文件。默认情况下,会先使用USB,然后选择蓝牙作为通讯方式。当--bluetooth参数出现的时候,只会以蓝牙方式上传文件。反之,如果--usb被指定,只会以usb方式上传文件。

如果用蓝牙方式上传,需要有一个搜索设备的过程。除非用-address参数指定一台连接上的设备的物理地址。

--name参数可以指定搜索指定名字的NXT设备。如果不指定,nxjupload会搜索所有的NXJ设备,并上传文件到第一台可以被成功连接的NXJ设备。

如果--run参数被指定,那么程序在完成上传之后,就立即被执行。

返回顶部

nxj – 连接,上传并运行程序

使用方法: nxj [options] main-class

范例:

nxj -r Tune

nxj 命令会连接并上传程序到NXT,其实是等价于在nxjlink命令之后跟着一个nxjupload命令。

nxjlink和nxjupload的参数,都可以使用。

二进制文件的名字,默认为*.nxj,所以你只需要指定主文件名,也会被识别,比如Tune代表了Tune.nxj。

返回顶部

使用PC API的命令行工具

用来编译和运行leJOS PC API程序的命令是:

  • nxjpcc
  • nxjpc

提醒:如果你没有使用以上工具来编译你的PC API 程序,那么你需要指定pccomm.jar和bluecove.jar(Linux用户还需要bluecove-gpl)到你的CLASSPATH路径中,同时你需要去除classes.jar。当然,java的路径还是需要指定。

nxjpcc – 为桌面电脑编译PC API程序

编译一个或者多个PC API java程序。

使用方法: nxjpcc [javac-options] <java-files>

范例:

nxjpcc SensorTest.java

返回顶部

nxjpc – 运行PC API程序

使用方法: nxjpc [java-options] <main-class>

调用java来运行PC API程序

范例:

nxjpc SensorTest

返回顶部