Second Qt Jambi Technology Preview

After doing some last minutes repairs the night before, we successfully launched the second technology preview of Qt Jambi (Qt for Java) yesterday. We've fixed a few bugs in this one, added some flexibility to the Eclipse plugin and Qt Jambi in general, and tried to iron out some bumps in the API.

One of the big things on our schedule for this release was to simplify the deployment of Qt Jambi applications. We wanted to be able to distribute apps as single .jar files that could be launched directly, and we wanted to support deployment through Java Web Start. The challenge in the first case is loading native library files, obviously, as Java itself does not explicitly support extracting them from within the .jar files. We also needed for the system to be expandable, so that you would be able to use the same techniques for deploying applications that depend on your own native libraries, and we needed it to be cross platform, so none of the Java classes could have hard coded dependencies on system libraries. We've introduced such a system to Qt Jambi for this release, and Qt Jambi will now automagically go behind your back and extract native libraries from your class path.

Java Web Start is nicer for such deployment purposes, as it already provides a simple, cross platform way of bundling native libraries. Since the Web Start application relies on custom class loaders, however, we did have to add some logic to get the class path file engine working. By following the link on the Qt Jambi download page, you'll get to a demonstration of this, where the Qt Jambi Demo Launcher is provided as a web start application. The launcher should work on Linux or Windows, and it relies heavily on the class path file engine for extracting images and other resources, and dynamically detecting which examples and demos are available.

Here's a screenshot, if that makes any sense.

Screenshot of Qt Jambi Demos running in Web Start

Abstract methods
In the last technical preview, pure virtual functions in the C++ API were empty implementations in the Java API. This was something which sorely needed to be fixed, so that's what we did. In TP2, they're abstract functions like their mothers and fathers. There was actually a lot of work involved in getting the Qt Jambi generator to make abstract methods work in a general way. There's seems to be a general rule that mapping any C++ concept to its Java equivalent will introduce you to a webs within webs of exotic snags and obstacles and existential paradoxes. Consider, for instance, cases of abstract and internal return types in mapped functions, possible modifications on the access rights of the pure virtuals, and cross language polymorphism. Those are just some examples of cases that make this job interesting , and I'm actually confident we've found very good and clean solutions for anything we've hit so far.

Eclipse integration
The Eclipse integration also has a bunch of improvements in the new preview package. There was a bug in the previous one that prevented it from integrating completely with the folder hierarchy in Eclipse, and that has been fixed. Now it should respect your project's structure, optionally generate its files into a separate folder to keep things neat and tidy, and respect the exclusion and inclusion patterns set on the build path as well. We've also added a "New Form" wizard to make it possible for the integration to generate widgets of different types, such as main windows and dialogs. Note that the new Eclipse integration requires Qt Jambi TP2, however, and that you will have to delete the old plugin before installing the new one. See the installation docs for more on this.

That was just a run down of a few new things in TP2. We're still looking for as much feed back as possible on Qt Jambi, so don't hesitate to post any suggestion, question or report to our mailing list. To subscribe, just send an e-mail to and put the word 'subscribe' in the subject. We've already started work on the third preview, and there's a lot of good stuff ahead.

Blog Topics: