Create Raspberry Pi SWT GUI Applications with Java and Eclipse

This tutorial describes how to create Raspberry Pi SWT applications in Java which are based on the Standard Widget Toolkit (SWT).

This allows the development of portable applications including Graphic User Interfaces (GUI) running under Windows, Mac, Linux and also the Raspberry Pi.

It is not described here how to create SWT applications in general, but I will concentrate on an existing project which is adapted in order to work with the Raspberry Pi.

LucidIoT Network I/O Module for Analog and Digital IO
LucidIoT Secure IoT Network I/O Module
  • 16 analog and digital IO channels
  • SSL/TLS secured
  • Data logging function
  • Compatible with LucidControl software
  • DIN-Rail enclosure
Read More ...
  • Multi-Protocol
USB Analog and Digital IO Modules

LucidControl USB IO Modules

  • Data acquisition and control
  • Cost effective and flexible
  • Platform independent
  • Windows® and Linux
  • Compatible with Raspberry Pi
  • Clippable on DIN-Rail
Read More ...
  • Industrial & home automation
LucidControl USB Digital I/O - Input Output Module

USB Digital Input Output Module

Read More ...

LucidControl Product Series

  • 4 insulated digital input channels
  • Counters, filters, edge detectors
  • Pulse width modulation and timers
  • 4 solid-state-relay output channels
USB Digital Input Module

USB Digital Input Module

LucidControl Product Series

  • 4 / 8 digital input channels
  • For 5V, 10V and 24V signals
  • Opto insulated contacts
  • Counters and edge detectors
Read More ...
USB Digital Output Module

USB Digital Output Module

LucidControl Product Series

  • Opto insulated option
  • 4 / 8 digital output channels
  • Relay module option
  • Pulse width modulation and timers
Read More ...
  • Switching and power control
USB RTD Input Module Pt100, Pt1000

USB Analog Input Module

LucidControl Product Series

  • Measurement range options
  • 4 / 8 analog input channels
  • e.g. 0-10 V or 0-20mA
  • 14 bit resolution
Read More ...
  • Acquisition of sensor signals
USB Analog Output Module

USB Analog Output Module

LucidControl Product Series

  • 4 analog output channels
  • Output range options
  • e.g. 0 - 10 V or 4 - 20 mA
  • 12 bit resolution
Read More ...
  • 4 - 20 mA current interfaces
USB RTD Input Module Pt100, Pt1000

USB RTD Input Module

LucidControl Product Series

  • 4 / 8 Pt1000 / Pt100 RTD channels
  • Temperature range: +/- 180 °C, 360 °C
  • 0.1 °C resolution
  • Heat control applications
Read More ...
  • Logging of temperatures

[one_third first]

Plug & Play USB IO

Turn your computer with LucidControl Plug & Play IO Modules within minutes to a powerful data acquisition, monitoring and control system.


Data Acquisition & Control

Ready for many automation applications. Measure temperatures, control your home, garden or caravan with the outstanding LucidControl IO devices.


RPi & Beagle Bone

LucidControl is compatible with the Raspberry Pi® and Beagle Bone Black which maximizes the number of possible applications.
[button link=”” style=”info” text=”grey” window=”yes”]Read more about …[/button]


Our LucidControl USB IO Devices work in combination with the Raspberry Pi and also the Beaglebone Black (and with a standard PC, of course). By using the provided Java or Python API it is possible to control and monitor analog and digital signals.

LucidControl Temperature Monitoring

LucidControl Temperature Monitoring

There are many applications in the industrial or home automation area where a Raspberry Pi can be used to control lamps, fans or valves, or where temperatures or voltages have to be monitored.

Having a GUI for these application is very beneficial and a big advantage compared to the command line tool because clicking a button is much simpler than entering commands in the shell.

Feel free to check out our article about monitoring 4 Pt1000 temperature sensors with the Raspberry Pi by using the swt-xy-graph diagram tool and find out how easy it is to build your own temperature logging and monitoring!


What is necessary for a GUI Application?

  • Since development on the Raspberry Pi is somehow slow, the application is developed on a PC running Eclipse IDE. I’m using Eclipse Juno 64 bit running on Windows 7. When you read this article you should be familiar with Eclipse.
  • The Java JDK must be installed on the development machine. Please ensure to use a 32 bit version of the JDK for this SWT project. The 64 and 32 bit JDK versions can be installed in parallel. Here Java 1.7.0 is used.
  • You need Raspbian on your Raspberry Pi. I’m using #474, which is currently the most recent which can be pulled by rpi-update, but it should work with most versions.
  • The Standard Widget Toolkit should be installed on the development computer.
  • And of course a Java Virtual Machine is necessary on the Raspberry Pi. Here you should be very careful because the selection of the correct JVM is crucial!

Why is the JVM installation important?

The problem with most JVM implementations is that there is no „native“ JIT support of the ARM hard float point unit and this function is emulated by the JVM.
Oracle Java 8, which is available as Early Access version, is currently the best choice and it is a real boost compared to all other implementations like OpenJDK, Cacao or ZeroVM.
Since the advantage can be up to factor 10 don’t think about using another JVM, otherwise you would be disappointed.

Check this impressive benchmark comparing different Java installations on the Raspberry Pi.

Very comprehensive results of the Raspberry Pi from the Roy Longbottom’s PC Benchmark Collection. Please see the Java Whetstone Benchmarks and the JavaDraw Benchmark.

Here you can find an interesting benchmark article about Java 8 on the Raspberry Pi.

Here you can find some installation instructions for Java 8 on the Raspberry Pi.


Preparation of the Raspberry Pi

If these prerequisites are fulfilled we can start setting up the Raspberry and install the necessary libraries.
Load and install the SWT libraries

sudo apt-get install libswt-gtk-3-java

It will also copy swt-gtk-3.8.0.jar to the folder /usr/share/java of you system. You should copy this file e.g. via FTP to you development computer since you will need this library in Eclipse later.

That’s all on the Pi so far.


Setup of the Eclipse Project

Eclipse Project Explorer

Eclipse Project Explorer

To make it short, it is not necessary to change a single line in your program. The adaptions made here affect only the creation of the JAR file and I’m sure the same result can be achieved by different ways.

The picture shows the Eclipse Project Explorer of the LucidControl Digital Output USB Device Demonstration. The lucidio.example.do4.basics project includes three libraries:

  • lucidio.jar – for LucidControl specific IO device functions. This library gives full access over LucidControl USB IO Devices.
  • jssc.jar – the Java Simple Serial Connector library. Please see my post where I compare the different Java Serial Port Libraries and why I went for jssc.
  • swt.jar – The Standard Widgets Tools library

Now it is only necessary to replace the swt.jar (here the 32 Bit version for Windows is used) by the swt-gtk-3.8.0.jar which you copied from the Raspberry Pi.

Eclipse remove SWT Library

Eclipse remove SWT Library

Open the Project Properties and go to Java Build Path -> Libraries Tab.
Select the swt.jar and click onto “Remove”.

Eclipse add External SWT Library

Eclipse add External SWT Library

Now the new SWT library must be added. Click onto “Add External JARs…” and browse to the swt-gtk-3.8.0.jar location.

Eclipse Project Export

Eclipse Project Export

Export the Runnable JAR File, copy it to the Raspberry Pi and start it.

Of course, it is not possible to start the application on your development machine as long as the swt-gtk-3.8.0.jar library is included. This is only done in order to make a deployable JAR and should be reverted afterwards.



The older Raspberry Pi version with 256 MB RAM is limited useful for Java GUI applications. If you only run a simple application (like the example) it might work. But as soon as you have Apache Tomcat or other memory consuming services running in the background, the system would slow down and it would take a minute or more to start an application.
If the Raspberry Pi has enough resources (like 512 MB RAM) the application starts in approx. 5 seconds and the usability is very good also.


Further Reading

LucidControl Remote Control

LucidControl Remote Control

Feel free to see the Raspberry Pi Live Demonstration where you can control the lightning in our office by your web browser. Find out how powerful a Raspberry Pi is and watch the live video streaming.

If this article was helpful for you or if you found a mistake in my writings, feel free to leave a comment.

LucidControl USB IO Module speaks Python® – Python USB IO

Python and LucidControl USB IO Module

LucidControl USB IO Module – Python API

Today, we publish the new Python USB IO API for the LucidControl USB IO Modules.

Python is a free, powerful and easy to learn programming language which is very interesting for everyone!

Python is a wide spread programming language and relies on the Python interpreter which is available for various operating systems.

Experienced programmers will like the fast application development and newcomers will love it’s simplicity and can expect a steep learning curve.

Python is driven by a big community and provides lots of libraries for common and special tasks.

We decided to create the Python USB IO API for this fantastic programming language in order to join the power of LucidControl USB IO Modules together with Python and in order to give our customers a tool they can create reliable applications rapidly with.