Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SWT jar for different platform

I am using JWebBrowser in a swing application. This class belongs to The DJ Project. It needs swt jar to execute. Now I have included swt jar for windows to my jar packaging of the application. I want to know how can I include swt jars for linux/mac in the same packaging? I am using ant to build the application jar. Should I build the jar putting different swt jar for different platform?

like image 496
Tapas Bose Avatar asked Aug 20 '11 19:08

Tapas Bose


People also ask

Where is SWT jar located?

jar , which is located in the JDK_Home/jre/lib/ directory. FXCanvas is a regular SWT canvas that can be used anywhere that an SWT canvas can appear. It's that simple. In this article, you will see how to create an interactive SWT button and JavaFX button, shown in Figure 8-1.

What is a SWT application?

The Standard Widget Toolkit (SWT) is a Java based user interface library for developing desktop application. SWT supports Windows, Linux and Mac OS X. It provides lots of standard widgets, e.g., buttons and text fields as well as the option to create custom widgets.

What is a SWT Java application?

SWT is an open source widget toolkit for Java designed to provide efficient, portable access to the user-interface facilities of the operating systems on which it is implemented.


3 Answers

if you want to have a single build that runs on different platforms (Win/Mac/Linux/*nix) or architectures (32/64 bit) then you can bundle the SWT jar for each target platform with your installer and then load the correct one dynamically at runtime (or have your installer copy the correct SWT jar at installation time).

E.g. say you want to support 32 and 64 bit Windows and Linux you would have SWT jars:

lib/swt_win_32.jar
lib/swt_win_64.jar
lib/swt_linux_32.jar
lib/swt_linux_32.jar

Make your ant script / installer include all of these (they are about 1.6MB each) and then at runtime in your code you can detect the OS and architecture using the Java system properties

System.getProperty("os.name");
System.getProperty("os.arch");

to build the name of the correct jar file.

Loading the jar at runtime can be performed by a custom classloader or by calling the protected method URLClassloader.addURL(URL url) using reflection.

I've put working code to perform this exact task on my website: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

If you can stand the code-smell then it's a quick solution to a very common SWT problem.

like image 83
ChrisWhoCodes Avatar answered Sep 21 '22 16:09

ChrisWhoCodes


On Mac OS +X, you can incorporate the required JAR and JNI libraries in an application bundle, as shown in this project. See also Deploying SWT Applications on Mac OS X.

On Linux, most platforms make an swt-gtk package available. As a concrete example, here's a startup script for AppleCommander:

java -Djava.library.path=/usr/lib/jni \
    -cp /usr/lib/java/swt-gtk-3.5.1.jar:AppleCommander-1.3.5.8.jar \
    com.webcodepro.applecommander.ui.AppleCommander -swt
like image 39
trashgod Avatar answered Sep 21 '22 16:09

trashgod


This answer contains the code to select the correct SWT JAR when you start your application: Create cross platform Java SWT Application

All you need to do is put all the JARs in the correct folder and the code will pick them up.

like image 23
Aaron Digulla Avatar answered Sep 19 '22 16:09

Aaron Digulla