leJOS / News: Recent posts

leJOS NXJ JDK (Java for LEGO NXT robots) 0.8 released

leJOS NXJ is a Java Developer Kit for the LEGO NXT robotics set. With it you can build amazing robots and program them in Java. This is version 0.8, which includes several new features and bug fixes:
* iCommand is dead! Long live iCommand. PC control is now included in pccomm.jar and the lejos.nxt.remote package (see 'pcsamples' directory).
* RS485 Support in lejos.nxt.comm
* Faster bootup times
* Fixed the upload reliability problem with some NXT bricks (if it didn't work before it probably works now)
* Support for RFID, RCX Rotation Sensor, and EOPD sensors.
* Much larger support for Java 1.6 classes (including ArrayList) thanks to Sven Koehler
* Support for Generics, Enum classes and foreach loops!
* A fully working lejos.subsumption package
* NXJControl utility for quick control of motors and sensors
* Wider support in the lejos.navigation packages
* javax.microedition.location for Bluetooth GPS
* Lots of sample code in the 'samples' directory
Visit our web site at http://www.lejos.org or download directly from http://lejos.sourceforge.net/p_technologies/nxt/nxj/downloads.php

Posted by Brian Bagnall 2009-05-24

leJOS NXJ 0.4.0 Beta Ready

leJOS NXJ is a replacement firmware JVM for the LEGO Mindstorms NXT brick. Version 0.4.0 now includes graphical widgets in the java.microedition.lcdui package, a multi-level menu system, wireless NXT to NXT communications using Bluetooth, and many more enhancements.

Posted by Brian Bagnall 2007-09-05

leJOS NXJ 0.3 Released

leJOS NXJ is a replacement firmware for the LEGO Mindstorms NXT brick. leJOS NXJ 0.3 is a full featured Java platform that now includes flash storage of multiple programs and files, a file system, a menu system, and much more.

Posted by Brian Bagnall 2007-07-18

leJOS version 2.1.0 released

leJOS is a Java-based replacement firmware (OS) for the Lego Mindstorms RCX brick that comes with Lego's Robotics Invention System. leJOS is meant to be a more complete (although less compact) alternative to TinyVM. This release includes USB support for Linux, a Vision API for Lego Vision Command, and a new remote control package.

There are plenty of new features in this release, including:
- a Vision API for Lego Vision Command
- 100% Java versions of the lejos tools
- USB support for Linux
- exhanced USB Mac OSX support, including josx.rcxcomm
- a new remote control package... read more

Posted by Brian Bagnall 2002-12-20

2.0 Released

This is a major release of lejos that includes:

  • Extensive and flexible support for RCX comms and networking. Giving you
    various levels of reliability and addressability. The protocol stacks are
    implemented in Java and a framework is provided to allow you to implement your
    own protocols. Interoperability with legos' LNP is provided.

  • Greatly enhanced memory management making your applications smaller, giving
    them more heap and removing arbitrary restrictions on recursion depth.... read more

Posted by Paul Andrews 2002-07-22

leJOS 1.0.5 Release includes RCX Brick Communications

Version 1.0.5 of leJOS is out! Major additions include 3kB extra memory, OSX support, and the long awaited communications API. What does communications mean for you? Now you can send data to a running RCX program using standard Java streams. Lawrie Griffiths had a major role in the development of this package and he decided to go all the way by including a java.net package too. Now you can browse web pages with your RCX brick!

Posted by Brian Bagnall 2002-04-17

Release 1.0.4 for Windows

Moved the 1.0.4.alpha2 release to a full release.

Posted by Paul Andrews 2002-02-06

Improved downloads, added USB support

If you have been experiencing any of the following problems, you should try using 1.0.3.beta1:

Downloads hanging.
Using RIS2.0 (i.e. you need to use USB).
Threads apparently not running.

Posted by Paul Andrews 2001-09-21

1.0.2 released

1.0.2.RC11 appeared to be stable and offer a good mix of features/performance so it has been renamed as 1.0.2.

Any future releases will increment the verson number.

Posted by Paul Andrews 2001-09-16

Released 1.0.2.RC1

My first release. See the release notes for details of what has changed. It'll stay as RC1 (Release Candidate 1) until I get some feedback on it. Now I just have to find someone to build a release for Linux.

Regards - Paul

Posted by Paul Andrews 2001-08-23

Added more Thread methods

Threading now supports priorities, daemon threads and interrupts. Thread state transitions now match those of standard Java, in particular threads can no longer be re-run. Runtime class now exists to report on total and free memory. Unit testing class added to utils. System class provides interface to memory check methods and there is now an exit() method that will terminate an application.

Minor fixes to out-of-memory checks. Name mangling modified to support overloaded native fuctions (of interest to developers only). Exiting an application now stops the motors.

Posted by Paul Andrews 2001-08-13

Updated build instructions

Added instructions for building using gcc 3.0 Unix. Plus added instructions for using Cygwin
1.3.2 (and gcc 3.0). In addition modified sources
so that they will build under gcc 3.0 without

Posted by Paul Andrews 2001-08-13

Project Status & Changes

The leJOS project is going through some
leadership changes. Tentatively, the new
maintainers will be: Brian Bagnall (website),
Paul Andrews and Jrgen Stuber. I'll stay
around, but my involvement will be reduced.


Posted by Jose Solorzano 2001-08-11

VM source compiles under Gameboy Development Kit

Run 'make' under gameboy_impl, and all of
the C source under vmsrc compiles with
lcc, the C compiler that comes with
gbdk 2.95-3 (see http://gbdk.sourceforge.net).

This is currently only available
in the latest CVS snapshot of leJOS.
No formal releases are planned yet.

lejos has a new -gb option that makes
it dump a C source file (containing all
the resolved bytecodes) which should be
linkable into a gbdk program.... read more

Posted by Jose Solorzano 2001-05-27

leJOS 1.0.0beta3 released!

I'm pleased to announce the release of
leJOS 1.0.0 beta 3. The infamous NT
"Permission Denied" bug in lejosfirmdl
appears to be fixed. Also, there's now
a workaround for a gcc bug that prevented installation in systems such as Mandrake 7.
Plus, there are several other improvements.


Posted by Jose Solorzano 2000-12-15

gcc 2.95.2 bug -- installation of leJOS on Unix

If your system has gcc 2.95.2, you might
see the following when you try to make
leJOS (Windows users need not worry):

> ../vmsrc/interpreter.c:206: Unable to generate
> reloads for:
> (insn 3410 3406 3412 (parallel
> (set (reg:SI 0 %eax)
> (fix:SI (fix:SF (subreg:SF (reg:SI 0
> %eax) 0))))
> (clobber (mem:HI (plus:SI (reg:SI 6
> %ebp)
> (const_int -6 [0xfffffffa
> 0))
> (clobber (mem:HI (plus:SI (reg:SI 6
> %ebp)
> (const_int -8 [0xfffffff8]))
> 0))
> (clobber (mem:SI (plus:SI (reg:SI 6
> %ebp)
> (const_int -4 [0xfffffffc]))
> 0))
> (clobber (scratch:HI))
> ] ) 145 {fix_truncsfsi2+1} (insn_list 3406
> (nil))
> (expr_list:REG_DEAD (reg:SI 0 %eax)
> (expr_list:REG_UNUSED (scratch:HI)
> (nil))))... read more

Posted by Jose Solorzano 2000-11-09

leJOS mentioned in Wired News article

There's a Wired News article about Lego Mindstorms


where Jonathan Knudsen is quoted as saying that
leJOS is "very cool stuff." (Jonathan Knudsen is
the author of The Unofficial Guide To Lego Mindstorms Robots).


Posted by Jose Solorzano 2000-11-09

Significant Sensor API Changes in leJOS 1.0.0 alpha5

I should say something about the changes to the
sensor API in 1.0.0alpha5 (released Monday), since they will probably affect existing
programs. The main difference is that a sensor
now has a type (e.g. light or touch) and a mode
(e.g. raw, boolean or percentage). These are set
with setTypeAndMode, preferably with values from
SensorConstants. The kinds of values that
readValue returns (i.e. canonical values) depend
on the type and mode. The readPercentage method
was removed. Also, SensorListener has only one
method, which is called only when the canonical
value changes.

The Sensor API that was brought over from TinyVM
was inadequate for advanced use, as some of the
feedback I've recevied indicates, e.g.: Peter
Dekkers was the first to send me some code and a
proposal to have a more object oriented Sensor
API with classes such as LightSensor,
TouchSensor, etc. He also suggested that Button and Sensor should have a common ancestor,
InputDevice. Ryan Vander Bijl also talked about
a similar object oriented approach. Sren Hilmer
sent some code, explaining an approach to only
get desired events in SensorListener's with only
one notification method (using masks). Recently, David Edwards noticed that TinyVM couldn't handle
rotation sensors. Not only is there a bug in the
API, but there is no way to reset the previous sensor value (which can now be done with setPreviousValue).

The object oriented approach, i.e. making Sensor
abstract and inheriting various sensor classes,
was appealing. I was already starting to code it, but I desisted due to several pragmatic reasons. Consider, for example, what it would be like to have two Sensor instances with different modes
and types.

You will also notice a performance increase in the Sensor API. The low-level (native) method readSensorValue can be executed about 2500 times per second in a for loop. Also, sensor events are now dispatched by a single thread, which
was also optimized. So code that relies on SensorListener's will also benefit.


Posted by Jose Solorzano 2000-10-26

Q&A on background of leJOS and TinyVM

Brian Bagnall was curious about the background
of the projects, as well as my (Jose
Solorzano's) personal background. He suggested
that I post answers to some questions he prepared. And I thought it would be fun to do that, so here it goes...

[Brian] First, let's have some stats on you, Jose. How old are you?

I'm 30. I was still in my 20s when I started
to work on TinyVM, if that counts for something :) ... read more

Posted by Jose Solorzano 2000-10-21

leJOS 1.0.0 alpha4 has java.lang.Math

Brian Bagnall has contributed Math.java with
implementations for pow, sqrt, sin, cos, and
tan. The implementation of these methods is
quite code-efficient. A test program that calls
these methods yields a linked binary file of
about 2.4 Kb.

A bug in the way the linker was writing double
constants was fixed before java.lang.Math could
work. Additionally, native method calling was
optimized in alpha 4. Expect about a 30%
performance improvement for certain native
calls.... read more

Posted by Jose Solorzano 2000-10-16

Why two projects?

Someone asked me "why two projects?" and I realized
the reasoning behing the fork hasn't been explained all too
well. It might be that I have doubts about the fork myself.

A marginally relevant reason has to do with usability:
controlling the footprint of the VM with C macros may not
be something that the majority of users will want to bother
with. And the linker would have to let certain unsupported opcodes pass, only to be rejected at runtime. The potential
differences between leJOS and TinyVM could be so
involved, that it would be impractical to have only one
code base.... read more

Posted by Jose Solorzano 2000-10-05

A little troubleshooting for alpha 1 and 2

A couple of problems have been reported by
users since the alpha release:

  1. The program loader dumps a ZipException

This will happen if one of the zip/jar
entries in the classpath doesn't exist.
It will be fixed in alpha3.

  1. The firmware downloader fails with an
    error: "write: Permission denied."

This seems to happen under Windows if too
many programs are running (presumably if
too many file descriptors are already taken).
Close all programs, or reboot, and try again.... read more

Posted by Jose Solorzano 2000-10-04

leJOS website available in CVS

The webpages are also available via cvs now.
If anyone out there is interested in contributing
by designing web pages, please contact me at


Posted by Jose Solorzano 2000-09-02

leJOS' CVS repository available

The cvs repository has been installed. You can check it
out and install it very much like you would install TinyVM.
The way the tools are used is slightly different. Don't trust
what the README file says yet. Consider it pre-alpha.
It's behind TinyVM in a lot of ways, but I know that floating
point operations work at least to some extent. String constants
should work as well. Let me know if you have any
questions.... read more

Posted by Jose Solorzano 2000-08-16