You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.6 KiB
65 lines
2.6 KiB
12 years ago
|
Developing and using Qt based applications written in Java
|
||
|
==========================================================
|
||
|
|
||
|
This document explains how to develop and use Qt based programs
|
||
|
written in Java. This is what the Qt java bindings from the package
|
||
|
libqt3-java are designed to accomplish.
|
||
|
|
||
|
Firstly, the bindings should work with any java compiler and VM
|
||
|
properly implementing the JNI interface, but they have only been
|
||
|
tested with the GCJ compiler and GIJ interpreter from the GCC suite.
|
||
|
Note that the bindings are not compiled to native code, using GCJ's
|
||
|
unique capability to do this, they are simply compiled to .class
|
||
|
files, and interpreted, in the classical Java manner.
|
||
|
|
||
|
Secondly, when compiling and running apps using the Qt Java bindings,
|
||
|
you need to add "/usr/share/java/qtjava.jar" to the CLASSPATH. E.g.
|
||
|
|
||
|
export CLASSPATH="/usr/share/java/qtjava.jar:/usr/share/java:."
|
||
|
javac Whatever.java
|
||
|
java Whatever
|
||
|
|
||
|
And, that's basically the hard part of it all. For the rest,
|
||
|
developing Qt Java apps is much like Qt C++ apps, except that working
|
||
|
with slots is easier, and compiles may be faster as well. The API
|
||
|
should be completely similar to the Qt C++ API, so the standard Qt
|
||
|
docs should translate pretty easily. There are a lot of Qt Java usage
|
||
|
examples in /usr/share/doc/libqt3-java/examples.
|
||
|
|
||
|
If you're interested in developing KDE applications using Java, look
|
||
|
at the libtrinity-java package.
|
||
|
|
||
|
|
||
|
Generating native executables
|
||
|
-----------------------------
|
||
|
|
||
|
It is also possible to produce native executables with the following gcj
|
||
|
invocation:
|
||
|
|
||
|
export CLASSPATH="/usr/share/java/qtjava.jar:/usr/share/java:."
|
||
|
gcj -fjni Somefile.java /usr/share/java/qtjava.jar --main=Somefile
|
||
|
LD_LIBRARY_PATH=/usr/lib/jni ./a.out
|
||
|
|
||
|
As this will compile the full qtjava.jar into native code, the resulting
|
||
|
executable will be rather large. If you plan on having several of these
|
||
|
executables, it may be worth creating a shared qtjava library, like
|
||
|
this:
|
||
|
|
||
|
gcj -fjni -shared /usr/share/java/qtjava.jar -o libqtjava-shared.so
|
||
|
|
||
|
And then, after you put libqtjava-shared.so in /usr/lib or similar, you
|
||
|
can go like:
|
||
|
|
||
|
gcj -fjni Somefile.java --main=Somefile -lqtjava-shared
|
||
|
LD_LIBRARY_PATH=/usr/lib/jni ./a.out
|
||
|
|
||
|
In the future, I'll investigate the possibility of shipping the
|
||
|
qtjava-shared library in the Debian packages.
|
||
|
|
||
|
Also, in order to avoid the necessity of setting the LD_LIBRARY_PATH
|
||
|
environment variable, the option -Djava.library.path=/usr/lib/jni can be
|
||
|
passed to the gcj invocation. There is, however, a bug [1] in gcj that
|
||
|
prevents this from working, and it's only fixed in gcj-4.0.
|
||
|
|
||
|
[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18234
|