|  | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
|  | <html> | 
|  | <head> | 
|  | <title>The SWT FAQ</title> | 
|  | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | 
|  | <link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css"> | 
|  | <link rel="stylesheet" href="swt.css" type="text/css"> | 
|  | <link rel="shortcut icon" href="http://www.eclipse.org/images/eclipse.ico" type="image/x-icon"> | 
|  | <style type="text/css"> dt { padding-top: 20px; padding-bottom: 5px; } </style> | 
|  | </head> | 
|  | <body bgcolor="#ffffff" text="#000000"> | 
|  | <table width="825px" class="swtpage"> | 
|  | <colgroup><col width="125px"><col width="700px"></colgroup> | 
|  | <tr><?php include "sidebar.php"; ?> | 
|  | <td valign="top" style="padding: 10px"><h1 style="padding: 0; margin: 0; border-bottom: 1px solid #000000;">The SWT FAQ</h1> | 
|  |  | 
|  | <p>If you have questions you believe should go in here, please let us know on | 
|  | the <a href="http://dev.eclipse.org/mailman/listinfo/platform-swt-dev">SWT developer mailing list</a>.</p> | 
|  |  | 
|  | <ul> | 
|  | <li><a href="#whatpackagesinSWT">What packages make up SWT?</a></li> | 
|  | <li><a href="#supportJavaBeans">Does SWT support JavaBeans?</a></li> | 
|  | <li><a href="#guibuilder">Is there a GUI Builder for SWT?</a></li> | 
|  | <li><a href="#whatisasnippet">What is a snippet and why do I care?</a></li> | 
|  | <li><a href="#swtsource">Where do I find the SWT source?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#howbuildjar">How do I build an SWT jar for my platform?</a></li> | 
|  | <li><a href="#howbuildplugin">How do I build the SWT Eclipse plug-in for my platform?</a></li> | 
|  | <li><a href="#howbuilddll">How do I build the SWT JNI libraries for my platform?</a></li> | 
|  | <li><a href="#howaddnatives">How do I add a new native to the SWT JNI libraries for my platform?</a></li> | 
|  | <li><a href="#howaddnativescocoa">How do I add a new native to the SWT JNI libraries for Cocoa?</a></li> | 
|  | <li><a href="#buildeclipseexe">How do I build the Eclipse executable for my platform?</a></li> | 
|  | <li><a href="#gtk64">How do I build the 64-bit version of SWT GTK?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#gtkstartup">What GTK version do I need to run SWT?</a></li> | 
|  | <li><a href="#osxvms">How can I decide which Eclipse/SWT port to use on OS X?</a></li> | 
|  | <li><a href="#carbonapp">On Mac Carbon, how do I run an SWT application from the command line?</a></li> | 
|  | <li><a href="#cocoa32launch">Why do I get an UnsatisfiedLinkError when launching from the 32-bit Cocoa or Carbon port?</a></li> | 
|  | <li><a href="#cocoa64launch">Why do I get an UnsatisfiedLinkError when launching from the 64-bit Cocoa port?</a></li> | 
|  | <li><a href="#javawebstart">How can I deploy my standalone SWT application with Java Web Start?</a></li> | 
|  | <li><a href="#ubuntupowerpc">How do I run SWT on Ubuntu PowerPC?</a></li> | 
|  | <li><a href="#pocketpcstart">What do I need to do to run SWT on the PocketPC?</a></li> | 
|  | <li><a href="#pocketpclibrary">Where is the SWT library for the PocketPC?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#xpthemes">How do I make SWT use the Windows XP themes?</a></li> | 
|  | <li><a href="#gtkfontsandcolors">On gtk, how do I change the default fonts and colors of widgets?</a></li> | 
|  | <li><a href="#motiffontsandcolors">On motif, how do I change the default fonts and colors of widgets?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#missingjar">Why do I get the error "java.lang.NoClassDefFoundError: org/eclipse/swt/internal/XXX/OS."?</a></li> | 
|  | <li><a href="#missingdll">Why do I get the error "java.lang.UnsatisfiedLinkError: no swt-win32-3232 in java.library.path."?</a></li> | 
|  | <li><a href="#konquerorUnzip">Why do I get an error beginning with "...SWTException: Unsupported or unrecognized format" on startup?</a></li> | 
|  | <li><a href="#useUnzip">Why do I get the error "error while loading shared libraries: ./libXm.so.2: file too short" on startup?</a></li> | 
|  | <li><a href="#missinglibXm">Why do I get the error "java.lang.UnsatisfiedLinkError: libXm.so.2: cannot open shared object file: No such file or directory."?</a></li> | 
|  | <li><a href="#usingLesstif">Why do I get the warning "XmParseMappingCreate() is not implemented yet" on Linux/Motif?</a></li> | 
|  | <li><a href="#reflectionX">Why do I get an error beginning with "org.eclipse.swt.SWTError: Font not valid" on startup?</a></li> | 
|  | <li><a href="#notenoughheap">Why do I get the error "java.lang.OutOfMemoryError: Java heap space" when I try to create a very large Image?</a></li> | 
|  | <li><a href="#debugmode">How do I enable debug mode in Eclipse for SWT?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#swinginswt">Can I use Swing or AWT inside Eclipse?</a></li> | 
|  | <li><a href="#subclassing">Why can't I subclass SWT widgets like Button and Table?</a></li> | 
|  | <li><a href="#printstacktrace">Why don't SWTError and SWTException override all printStackTrace methods?</a></li> | 
|  | <li><a href="#printOnX">How do I print using my favorite Unix print program?</a></li> | 
|  | <li><a href="#installedprinters">How can I tell whether or not there are any printers installed?</a></li> | 
|  | <li><a href="#noprintimage">How do I print a snapshot of a widget?</a></li> | 
|  | <li><a href="#smallprint">Why does everything I print seem so small?</a></li> | 
|  | <li><a href="#printertrim">What does computeTrim mean for a Printer?</a></li> | 
|  | <li><a href="#autotest">How can I implement user interaction tests?</a></li> | 
|  | <li><a href="#gtkselectiongone">On gtk, why does my widget's selection disappear when it loses focus?</a></li> | 
|  | <li><a href="#gtkwidgethidden">On gtk and motif, why are some widgets hidden when they are visible on Windows or the Macintosh?</a></li> | 
|  | <li><a href="#advancedgraphics">Which platforms have advanced graphics support?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#whatisbrowser">What is the SWT Browser widget?</a></li> | 
|  | <li><a href="#browserplatforms">Which platforms support the SWT Browser, and which native renderers do they use?</a></li> | 
|  | <li><a href="#browserspecifydefault">How do I specify the default type of native renderer that is used by the Browser?</a></li> | 
|  | <li><a href="#browsernativeie">Which Internet Explorer version do Browsers on Windows use?</a></li> | 
|  | <li><a href="#browserlinux">What do I need to run the SWT Browser inside Eclipse on Linux?</a></li> | 
|  | <li><a href="#browsersolaris">What do I need to run the SWT Browser inside Eclipse on Solaris?</a></li> | 
|  | <li><a href="#browserlinuxrcp">What do I need to run the SWT Browser in a standalone application on Linux or Solaris?</a></li> | 
|  | <li><a href="#howusewebkit">How do I explicitly use WebKit as the Browser's underlying renderer?</a></li> | 
|  | <li><a href="#howusemozilla">How do I explicitly use Mozilla as the Browser's underlying renderer?</a></li> | 
|  | <li><a href="#browserwebkitgtk">How do I use the WebKit renderer on Linux-GTK?</a></li> | 
|  | <li><a href="#browserlinuxibm">How can I get the SWT Browser to work with the IBM 1.4 VM?</a></li> | 
|  | <li><a href="#browserapplets">Can I view Java applets in the SWT Browser?</a></li> | 
|  | <li><a href="#browserscrollbar">How do I hide the Browser's scrollbars?</a></li> | 
|  | <li><a href="#browserproxy">How do I set a proxy for the Browser to use?</a></li> | 
|  | <li><a href="#specifyxulrunner">Can I specify which XULRunner installation gets used?</a></li> | 
|  | <li><a href="#howdetectmozilla">How does the Browser detect a native Mozilla browser to use?</a></li> | 
|  | <li><a href="#printmozillapath">How can I determine which installed Mozilla browser is being used to render Browser content?</a></li> | 
|  | <li><a href="#mozillaplugins">How can my Mozilla-based Browser find my Mozilla plug-ins?</a></li> | 
|  | <li><a href="#howusejavaxpcom">How do I use JavaXPCOM with the Browser?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#swtawtosx">Why does the SWT_AWT bridge not work for me on OS X?</a></li> | 
|  | <li><a href="#swtawtosxmore">Why does the SWT_AWT bridge not work for me on OS X, even after updating Java or the OS?</a></li> | 
|  | <li><a href="#swtawtsolaris">Why does the SWT_AWT bridge not work for me on AIX or Solaris?</a></li> | 
|  | <li><a href="#printOnGTK">Why is the Print menu item disabled in Eclipse on GTK (Linux, UNIX)?</a></li> | 
|  | <li><a href="#printOnGTKHangs">Why does Eclipse 3.3 freeze when I open an editor on GTK 2.10 (Linux, UNIX)?</a></li> | 
|  | <li><a href="#printOnMotif">Why is the Print menu item disabled in Eclipse on Motif?</a></li> | 
|  | <li><a href="#uithread">Why do I get the error "org.eclipse.swt.SWTException: Invalid thread access"?</a></li> | 
|  | <li><a href="#noautolayout">Why do I have to resize my shell to get my changed widgets to lay out again?</a></li> | 
|  | <li><a href="#nographicslibrary">Why do I get "SWTException: Unable to load graphics library" using GC?</a></li> | 
|  | <li><a href="#scrollonlinux">Why doesn't mouse scrolling work on Linux/Motif?</a></li> | 
|  | <li><a href="#twmfocusfollowsmouse">Why can't I move my mouse into certain controls using TWM on Linux/Motif?</a></li> | 
|  | <li><a href="#twmmodaldialogs">Why don't modal dialogs stay on top of other windows on Solaris 10 using CDE and DTWM?</a></li> | 
|  | <li><a href="#32eclipsegtk64">Why do I get strange drawing behaviour when running 32 bit Eclipse on a 64 bit GTK platform?</a></li> | 
|  | <li><a href="#rtlgtk28">Why doesn't SWT.RIGHT_TO_LEFT work on some GTK versions (less than 2.8)?</a></li> | 
|  | <li><a href="#decorationHints">Why doesn't my Shell have the trim decorations that I specified in its constructor?</a></li> | 
|  | <li><a href="#noevents">Why doesn't a widget send events when I change it programmatically?</a></li> | 
|  | <li><a href="#relayout">Why doesn't my layout update when I create/dispose/move/resize a control?</a></li> | 
|  | <li><a href="#scrolledcomposite">How do I programmatically scroll a Composite?</a></li> | 
|  | <li><a href="#copypastewithKlipper">Why does Copy/Paste sometimes not work on Linux?</a></li> | 
|  | <li><a href="#jumplist">Can I use the TaskItem's menu without the launcher?</a></li> | 
|  | <li><a href="#multiplatformjar">How do I produce a single jar file that contains all of the various SWT platform jars?</a></li> | 
|  | <li><a href="#twistieanimation">How do I enable the fade annimation for expando buttons in Trees (Windows Vista and up) ?</a></li> | 
|  | <p></p> | 
|  | <li><a href="#keyboardshortcuts" name="accessibility">What are the standard keyboard shortcuts on Windows, Mac OS X, Linux?</a></li> | 
|  | <li><a href="#screenreaders">Can I use a screen reader with Eclipse?</a></li> | 
|  | <li><a href="#oldScreenReaderNotWorking">Why doesn't my old Windows screen reader work with Eclipse 3.6?</a></li> | 
|  | <li><a href="#tableheaderswithJAWS">How do I get JAWS to read Table column headers?</a></li> | 
|  | <li><a href="#moreAccessibilityInfo">Where can I get more info on Accessibility in Eclipse/SWT?</a></li> | 
|  | </ul> | 
|  |  | 
|  | <p></p> | 
|  | <hr> | 
|  | <p></p> | 
|  |  | 
|  | <dl> | 
|  | <dt><strong><a name="whatpackagesinSWT"> Q: What packages make up SWT?</a></strong></dt> | 
|  | <dd>A:  Package names in SWT begin with the prefix <strong>org.eclipse.swt</strong>.<br> | 
|  | <p>Here is the complete list:</p> | 
|  | <ul> | 
|  | <li>org.eclipse.swt | 
|  | <li>org.eclipse.swt.accessibility | 
|  | <li>org.eclipse.swt.awt | 
|  | <li>org.eclipse.swt.browser | 
|  | <li>org.eclipse.swt.custom | 
|  | <li>org.eclipse.swt.dnd | 
|  | <li>org.eclipse.swt.events | 
|  | <li>org.eclipse.swt.graphics | 
|  | <li>org.eclipse.swt.internal.* (Not API, do not reference classes in these packages) | 
|  | <li>org.eclipse.swt.layout | 
|  | <li>org.eclipse.swt.opengl | 
|  | <li>org.eclipse.swt.ole.win32 (Windows only) | 
|  | <li>org.eclipse.swt.printing | 
|  | <li>org.eclipse.swt.program | 
|  | <li>org.eclipse.swt.widgets | 
|  | </ul> | 
|  | <p>Classes that are not in these packages do not belong to SWT.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="supportJavaBeans">Q: Does SWT support JavaBeans?</a></strong></dt> | 
|  | <dd>A: To the extent that it makes sense, given the constraints of operating system | 
|  | compatibility, SWT mirrors the beans behavior. An example of this is the use | 
|  | of standard beans mechanisms for event dispatch (EventListener, EventObject and adapter | 
|  | classes). Some aspects of the beans paradigm, such as the ability to create beans with | 
|  | null constructors, run counter to the constraints of the underlying operating systems | 
|  | that SWT runs on.  For example, operating systems do not typically support creating a | 
|  | widget without specifying its parent. | 
|  | <p></p> | 
|  | The essence of the problem is that if you allow a widget to be created with a null | 
|  | constructor, then you can't actually create the o/s resources at the time the constructor | 
|  | runs (you would have to wait until later, after the parent has been set). We can not | 
|  | do this, since we <em>always</em> create the o/s resources in the constructor, and for | 
|  | performance/efficiency/consistency reasons do not keep slots in the object to hold | 
|  | whatever state would be required if the object were to be created later. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="guibuilder">Q: Is there a GUI Builder for SWT?</a></strong></dt> | 
|  | <dd>A: SWT itself does not provide a GUI Builder (also known as "GUI Designer", "GUI Editor", | 
|  | "Visual Builder", "Visual Designer", "Visual Editor", or "Visual Composition Editor"). | 
|  | There are, however, several mature 'third-party' products listed at | 
|  | <a href="http://marketplace.eclipse.org/">http://marketplace.eclipse.org/</a>. Search for "GUI Builder". | 
|  | Or you can follow the progress on the <a href="http://www.eclipse.org/vep/">Eclipse Visual Editor Project</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="whatisasnippet">Q: What is a snippet and why do I care?</a></strong> | 
|  | </dt> | 
|  | <dd>A: A snippet is a <em>minimal stand alone</em> program that demonstrates functionality or | 
|  | lack of functionality. | 
|  |  | 
|  | <p>Why is this important?  Posting a snippet to the news group is the | 
|  | quickest way to get help.  Including a snippet in a bug report is the fastest | 
|  | way to get a bug fixed.  Taking the time to construct a snippet helps you understand | 
|  | the API of the library you are calling and focuses your thinking.  For example, the | 
|  | SWT team uses C and Java snippets internally to prove or disprove problems in the operating system. | 
|  | Often, something you think is a bug is actually caused by something elsewhere | 
|  | in your program. | 
|  |  | 
|  | <p>Snippets isolate problems.  Code speaks louder than words. | 
|  |  | 
|  | <p>Here is a minimal stand alone SWT program to help you get started: | 
|  | <pre>public static void main (String [] args) { | 
|  | Display display = new Display (); | 
|  | Shell shell = new Shell (display); | 
|  | shell.open (); | 
|  | while (!shell.isDisposed ()) { | 
|  | if (!display.readAndDispatch ()) display.sleep (); | 
|  | } | 
|  | display.dispose (); | 
|  | }</pre> | 
|  |  | 
|  | For a list of sample snippets, see the <a href="snippets">SWT snippets page</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="swtsource">Q: Where do I find the SWT source?</a></strong> | 
|  | <dd>A: SWT's source can be retrieved directly from GIT as described in <a href="http://www.eclipse.org/swt/git.php">Using SWT from GIT</a>.  It's also included | 
|  | in eclipse as follows: | 
|  | <ul> | 
|  | <li>eclipse 3.4 and newer: <code>plugins/org.eclipse.swt.<em><ws></em>.<em><os></em>.<em><arch></em>.source_<em>X.X.X.<version></em>.jar</code></li> | 
|  | <li>eclipse 3.3.2 and earlier: directory <code>plugins/org.eclipse.rcp.source.<em><os></em>.<em><ws></em>.<em><arch></em>_<em>X.X.X.<version></em>/src/</code></li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howbuildjar">Q: How do I build an SWT jar for my platform?</a></strong> | 
|  | </dt> | 
|  | <dd>A: The SWT jar can be built from the eclipse GIT repository using an Ant task: | 
|  | <ol> | 
|  | <li> Retrieve SWT directly from GIT as described in <a href="http://www.eclipse.org/swt/git.php">Using SWT from GIT</a> | 
|  | <li>Load the projects <strong>org.eclipse.swt</strong> and <strong>org.eclipse.swt.</strong><em>WS.OS.ARCH</em> where <em>WS.OS.ARCH</em> are the names of the | 
|  | windowing system, operating system and architecture of interest, respectively.  For example, <strong>org.eclipse.swt.gtk.linux.x86</strong>. | 
|  | <li>In the project <strong>org.eclipse.swt.</strong><em>WS.OS.ARCH</em>, locate the file <strong>build.xml</strong>.  This is an Ant script. | 
|  | <li>Run Ant on the target <strong>build.jars</strong>.  If you are using eclipse as your development environment, you can run | 
|  | Ant by selecting the file in the Navigator or Packages view, then selecting <strong>Run Ant...</strong> from the context | 
|  | menu. | 
|  | <li>The script will create file <strong>swt.jar</strong> in the root directory of the <strong>org.eclipse.swt.</strong><em>WS.OS.ARCH</em> | 
|  | project.  When it has finished running you can Refresh this project to bring this jar into your eclipse workspace. | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howbuildplugin">Q: How do I build the SWT Eclipse plug-in for my platform?</a></strong> | 
|  | </dt> | 
|  | <dd>A: The SWT Eclipse plug-in can be built (excluding the signing of the jar) with the steps below. | 
|  | <ol> | 
|  | <li> Retrieve SWT directly from GIT as described in <a href="http://www.eclipse.org/swt/git.php">Using SWT from GIT</a> | 
|  | <li> Load the projects org.eclipse.swt and org.eclipse.swt.WS.OS.ARCH where WS.OS.ARCH are the names of the windowing system, operating system and architecture of interest, respectively. For example, org.eclipse.swt.gtk.linux.x86. | 
|  | <li>(optional) If you wish to compile SWT in your workspace, in the Navigator view rename the <strong>org.eclipse.swt</strong> project's <strong>.classpath_</strong>WS | 
|  | file to <strong>.classpath</strong>.  This is useful if, for instance, you have a patch to apply to the SWT codebase before building the plug-in. | 
|  | <li>Invoke the File > Export... menu item, then select the "Plug-in Development" - "Deployable Plug-ins and Fragments" wizard, and press Next. | 
|  | <li>In the resulting wizard's plug-ins list, select the <strong>org.eclipse.swt.</strong><em>WS.OS.ARCH</em> fragment. | 
|  | <li>Specify a destination for the output. | 
|  | <li>On the Options tab set the qualifier to the plug-in's desired qualifier string.  This will be something like <strong>v3655</strong> and must match the | 
|  | qualifier of Eclipse's SWT plug-in that is being replaced. | 
|  | <li>Press Finish to export the plug-in. | 
|  | </ol> | 
|  | <p> | 
|  | <em>Important note</em>: Once the plug-in has been exported, the intermediate files that were created in order to make the plug-in jar are not deleted. | 
|  | As a result, subsequent exports of the same plug-in will <em>NOT</em> recompile the workspace contents, and therefore will not contain any changes that have | 
|  | been made in the interim.  For such changes to be included in a re-export of the plug-in, these intermediate files must be deleted in order to force | 
|  | their recompilation.  The easiest way to do this is to select the <strong>org.eclipse.swt.</strong><em>WS.OS.ARCH</em> project, press F5 to refresh it, and | 
|  | then replace its content with the released content. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howbuilddll">Q: How do I build the SWT JNI libraries for my platform?</a></strong> | 
|  | </dt> | 
|  | <dd>A: SWT uses JNI to interact with the native widgets in the | 
|  | operating system.  The SWT JNI libraries must be compiled for the | 
|  | windowing system, operating system and hardware architecture of | 
|  | interest.  The libraries can be built either from the code in the GIT | 
|  | repository or from an eclipse SDK download. | 
|  |  | 
|  | <p>In order to build the required libraries and run Eclipse, you | 
|  | will require a JDK (Java Development Kit) version that is supported | 
|  | by Eclipse.  Check eclipse.org for details.</p> | 
|  |  | 
|  | <p><strong>Building the SWT JNI libraries from the eclipse SDK download:</strong> | 
|  | <ol> | 
|  | <li>Download an Eclipse distribution from | 
|  | <a href="http://www.eclipse.org/downloads/index.php">http://www.eclipse.org/downloads/index.php</a>.</li> | 
|  |  | 
|  | <li>Unzip the distribution.  This will create a directory called <tt>eclipse</tt>. | 
|  | This directory is subsequently referred to as <em><eclipseRoot></em>. | 
|  |  | 
|  | <li>Copy file <tt><em><eclipseRoot></em>/plugins/org.eclipse.swt.<em><ws></em>.<em><os></em>.<em><arch></em>.source_X.X.X.<em><versionString></em>.zip</tt> | 
|  | to another directory and unzip it. | 
|  |  | 
|  | <li>Edit the file <strong>build.sh</strong> (or <strong>build.bat</strong> on Windows) | 
|  | in the current directory. Set the environment variables defined in that file to | 
|  | match the location of your JRE, etc. Save the file and close it. | 
|  |  | 
|  | <li>Run the <tt>build</tt> command (<strong>sh build.sh</strong> for UNIX and Linux | 
|  | platforms, <strong>build.bat</strong> for Windows).  This will create the appropriate | 
|  | library file(s) in the current directory.  For example, this will create | 
|  | <tt>swt-XXXX.dll</tt> files on windows, or <tt>libswt-XXXX.so</tt> files on Linux | 
|  | and Solaris. | 
|  | </ol> | 
|  |  | 
|  | <p>This description was originally contributed by Colin R Devilbiss.</p> | 
|  |  | 
|  |  | 
|  | <p><strong>Building the SWT JNI libraries from the eclipse GIT repository:</strong><br> | 
|  | <strong>NOTE</strong>: These instructions require you to use Eclipse | 
|  |  | 
|  | <ol> | 
|  | <li>Follow <a href="git.php">these instructions</a> to get SWT from GIT. | 
|  |  | 
|  | <li>Compile the project.  This will create a folder called bin under the org.eclipse.swt project. | 
|  |  | 
|  | <li>Change directory into <tt>org.eclipse.swt/bin/library</tt> | 
|  |  | 
|  | <li>Edit the file <strong>build.sh</strong> (or <strong>build.bat</strong> on Windows) | 
|  | in the current directory. Set the environment variables defined in that file to | 
|  | match the location of your JRE, etc. Save the file and close it. | 
|  |  | 
|  | <li>Run the <tt>build</tt> command (<strong>sh build.sh</strong> for UNIX and Linux | 
|  | platforms, <strong>build.bat</strong> for Windows).  This will create the appropriate | 
|  | library file(s) in the current directory.  For example, this will create | 
|  | <tt>swt-XXXX.dll</tt> files on windows, or <tt>libswt-XXXX.so</tt> files on Linux | 
|  | and Solaris. | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howaddnatives">Q: How do I add a new native to the SWT JNI libraries for my platform?</a></strong> | 
|  | </dt> | 
|  | <dd>A: For the steps to add new natives to the SWT JNI libraries, see <a href="http://www.eclipse.org/swt/jnigen.php"> | 
|  | Generating the SWT JNI Code.</a> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howaddnativescocoa">Q: How do I add a new native to the SWT JNI libraries for Cocoa?</a></strong> | 
|  | </dt> | 
|  | <dd>A: For the steps to add new natives to the SWT Cocoa JNI libraries, see <a href="http://www.eclipse.org/swt/macgen.php"> | 
|  | Generating the SWT PI Code for Cocoa.</a> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="buildeclipseexe">Q: How do I build the Eclipse executable for my platform?</a></strong> | 
|  | </dt> | 
|  | <dd>A: Eclipse is launched by a binary executable which puts up a splash screen and launches a Java VM. | 
|  | The executable must be compiled for the windowing system, operating system and hardware architecture of interest. | 
|  | The libraries can be built from an eclipse SDK download. | 
|  |  | 
|  | <p><strong>Building the Eclipse executable from the eclipse SDK download:</strong> | 
|  | <ol> | 
|  | <li>In order to build the required libraries and run Eclipse, | 
|  | you will require a JDK (Java Development Kit) of version 1.4.2 or later. | 
|  | Download an Eclipse distribution from | 
|  | <a href="http://www.eclipse.org/downloads/index.php">http://www.eclipse.org/downloads/index.php</a>.</li> | 
|  |  | 
|  | <li>Unzip the distribution.  This will create a directory called <tt>eclipse</tt>. | 
|  | This directory is subsequently referred to as <em><eclipseRoot></em>. | 
|  |  | 
|  | <li>In the directory <tt><em><eclipseRoot></em>/plugins/org.eclipse.platform.source_X.X.X/src</tt>, | 
|  | find the <tt>launchersrc.zip</tt> file under <tt>org.eclipse.platform_X.X.X</tt>. | 
|  |  | 
|  | <li>Unzip the file <tt>launchersrc.zip</tt>.  This will create a directory called <tt>library</tt>. | 
|  |  | 
|  | <li>Change directory into <tt>library/<em>WS</em></tt>, where <em>WS</em> is the name of the windowing system | 
|  | e.g. win32, motif, gtk, photon, or carbon. | 
|  | Modify any incorrect <tt>_HOME</tt> variables defined at the top of the appropriate <tt>.mak</tt> file. | 
|  |  | 
|  | <li>Run the <tt>build</tt> command (<strong>sh build.sh</strong> for UNIX and Linux, <strong>build.bat</strong> for Windows). | 
|  | This will create an executable launcher called <tt>eclipse</tt>. | 
|  | Move this <tt>eclipse</tt> executable to <em><eclipseRoot></em>. | 
|  |  | 
|  | <li>As of eclipse 3.3 an <tt>eclipse_<em><version></em></tt> shared library is also created by the previous step. | 
|  | Move this library to the appropriate <tt>org.eclipse.equinox.launcher.<em><ws></em>.<em><os></em>.<em><arch></em></tt> | 
|  | fragment. | 
|  | </ol> | 
|  |  | 
|  | <p>This description was originally contributed by Colin R Devilbiss.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="gtk64">Q: How do I build the 64-bit version of SWT GTK?</a></strong></dt> | 
|  | <dd>A: Follow these steps to extract the 64-bit SWT GTK source code from GIT and produce your own build: | 
|  | <ol> | 
|  | <li>Start Eclipse and retrieve the <code>org.eclipse.swt</code>, <code>org.eclipse.swt.gtk.linux.x86_64</code> and | 
|  | <code>org.eclipse.swt.tools</code> projects from dev.eclipse.org (see | 
|  | <a href="http://www.eclipse.org/swt/git.php">How to use SWT from GIT</a>, use <code>.classpath_gtk</code> | 
|  | as the <code>.classpath</code> file in the <code>org.eclipse.swt</code> project).</li> | 
|  | <li>Convert SWT's Java from its 32-bit form to 64-bit:</li> | 
|  | <ul> | 
|  | <li>To convert the Java code in-place, go to the <code>build.xml</code> ant script in the <code>org.eclipse.swt.gtk.linux.x86_64</code> | 
|  | project and run its "replace.32.to.64" target.  Once this target has completed you must refresh (F5) | 
|  | the <code>org.eclipse.swt</code> project in order to pick up the changes.</li> | 
|  | <li>Run the "build_libraries" target in the same <code>build.xml</code> file.  Refresh (F5) | 
|  | the <code>org.eclipse.swt.gtk.linux.x86_64</code> project when this target has completed, to pick up the new libraries.</li> | 
|  | </ul> | 
|  | <li>You're done!  The <code>org.eclipse.swt.gtk.linux.x86_64</code> project will now contain the 64-bit native libraries, and if you're | 
|  | interested, the 64-bit source code will now be available in the <code>org.eclipse.swt.gtk.linux.x86_64/src</code> folder. | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="gtkstartup">Q: What GTK version do I need to run SWT?</a></strong></dt> | 
|  | <dd>A: SWT requires the following GTK+ versions (or newer) to be installed: | 
|  | <ul> | 
|  | <li>Eclipse/SWT 3.6.x and newer: GTK+ 2.4.1 and its dependencies</li> | 
|  | <li>Eclipse/SWT 3.0.x - 3.5.x: GTK+ 2.2.1 and its dependencies</li> | 
|  | <li>Eclipse/SWT 2.1.x: GTK+ 2.0.6 and its dependencies</li> | 
|  | </ul> | 
|  | <p> | 
|  | You can determine which version of GTK you are running with <tt>rpm -q gtk2</tt>. | 
|  | </p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="osxvms">Q: How can I decide which Eclipse/SWT port to use on OS X?</a></strong></dt> | 
|  | <dd>A: It depends on the VM and OS version that you are using and your personal preference. The Eclipse downloads page lists | 
|  | the following Eclipse platforms: | 
|  | <ul> | 
|  | <li><b>Mac OS X (Mac/Cocoa)</b> - This 32-bit port needs a Java 5 VM and runs on Leopard (OS X v10.5).</li> | 
|  | <li><b>Mac OS X (Mac/Cocoa/x86_64)</b> - This 64-bit port needs a Java 5 or Java 6 VM and runs on Leopard.</li> | 
|  | <li><b>Mac OS X (Mac/Carbon)</b> - This 32-bit port needs a Java 1.4 or Java 5 VM and runs on both Tiger (OS X v10.4) and Leopard.</li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="carbonapp">Q: On Mac Carbon, how do I run an SWT application from the command line?</a></strong></dt> | 
|  | <dd>A: If you run a Java application that uses Carbon via JNI, the application is not registered with the OS as | 
|  | a 'normal' UI application.  As a consequence, it has no entry in the dock and it cannot be activated. AWT | 
|  | (or Swing) based applications don't have this problem because they seem to use undocumented SPI to register | 
|  | themselves. | 
|  |  | 
|  | <p>To work around this problem you'll have to pass the -XstartOnFirstThread option to the | 
|  | java executable as follows:</p> | 
|  | <pre> | 
|  | java -XstartOnFirstThread -cp swt.jar:. ControlExample | 
|  | </pre> | 
|  |  | 
|  | <p>If you want to run a bundled application, take a look at this | 
|  | <a href="http://www.eclipse.org/swt/macosx/">article</a>.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="cocoa32launch">Q: Why do I get an UnsatisfiedLinkError when launching from the 32-bit Cocoa or Carbon port?</a></strong></dt> | 
|  | <dd>A: You need to be sure that you are forcing your launch to use a 32-bit VM. Apple ships most of their VMs with 32 and | 
|  | 64-bit binaries. To force the VM to run in 32-bit mode, use the -d32 option as VM argument in your launch configuration. | 
|  | Note that as of Snow Leopard (OS X v10.6) the default VM is 64-bit. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="cocoa64launch">Q: Why do I get an UnsatisfiedLinkError when launching from the 64-bit Cocoa port?</a></strong></dt> | 
|  | <dd>A: You need to be sure that you are forcing your launch to use a 64-bit VM. Apple ships most of their VMs with 32 and | 
|  | 64-bit binaries. To force the VM to run in 64-bit mode, use the -d64 option as VM argument in your launch configuration. | 
|  |  | 
|  | <p>If you are launching with SWT from GIT in your workspace (see | 
|  | <a href="http://www.eclipse.org/swt/git.php">How to use SWT from GIT</a>, use <code>.classpath_cocoa</code> | 
|  | as the <code>.classpath</code> file in the <code>org.eclipse.swt</code> project and make sure you have the | 
|  | org.eclipse.swt.cocoa.maxosx.x86_64 project in your workspace), | 
|  | then you also need to modify the <code>.classpath</code> file as follows: | 
|  | <pre> | 
|  | attribute value="org.eclipse.swt.cocoa.macosx"</pre>change to:<pre> | 
|  | attribute value="org.eclipse.swt.cocoa.macosx.x86_64"</pre> | 
|  | </p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="javawebstart">Q: How can I deploy my standalone SWT application with Java Web Start?</a></strong></dt> | 
|  | <dd>A: For steps that can be used to package and deploy an SWT application with Java Web Start (JWS) see | 
|  | <a href="http://www.eclipse.org/swt/jws/">How to deploy SWT Applications with Java Web Start</a>.  A related article | 
|  | that describes the deployment of SWT applications with JWS (but does not outline the process of packaging SWT) can be found at | 
|  | <a href="http://www-106.ibm.com/developerworks/opensource/library/os-jws/">http://www-106.ibm.com/developerworks/opensource/library/os-jws/</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="ubuntupowerpc">Q: How do I run SWT on Ubuntu PowerPC?</a></strong> | 
|  | </dt> | 
|  | <dd>A: As of Eclipse 3.7 builds of Eclipse/SWT are no longer produced for 32-bit PowerPC.  Builds are still produced | 
|  | and supported for 64-bit PowerPC.  However Ubuntu's 64-bit PowerPC distribution (10.04 LTS) is missing 64-bit compilations | 
|  | of many libraries required by SWT, so Eclipse/SWT will not run here.  To use Eclipse/SWT on Ubuntu PowerPC you either must | 
|  | use a 32-bit PowerPC release (available for Eclipse versions prior to 3.7), or for 64-bit PowerPC users wishing to use | 
|  | Eclipse/SWT 3.7 or newer, manually build 64-bit compilations of swt's dependencies. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="pocketpcstart">Q: What do I need to do to run SWT on the PocketPC?</a></strong> | 
|  | </dt> | 
|  | <dd>A: There is an experimental version of SWT for WinCE devices. If you wish to | 
|  | give it a try, the following steps may help you with getting started. | 
|  | <ol> | 
|  | <li>Install a VM on your PocketPC. | 
|  | <br>The port is tested using the J9 VM for ARM WinCE PocketPC. | 
|  | <ul> | 
|  | <li>For information on how to get the J9 VM, see at the WebSphere Studio Device Developer website (which ships J9): | 
|  | <br><a href="http://www.embedded.oti.com/wdd">http://www.embedded.oti.com/wdd</a> | 
|  | <li>For questions on how to use the J9 VM, see the WebSphere newsgroup: | 
|  | <br><a href="news://news.software.ibm.com/ibm.software.websphere.studio.device-developer">ibm.software.websphere.studio.device-developer</a> | 
|  | </ul> | 
|  | <li>Get the swt.jar and SWT dll for PocketPC. See <a href="#pocketpclibrary">Where is the SWT library for the PocketPC?</a> | 
|  | <li>Copy the swt.jar and SWT dll to your device. | 
|  | <li>Copy your SWT app to your device. | 
|  | <br>For example, compile the following class inside Eclipse and copy the resulting | 
|  | class file to your device. | 
|  | <pre> | 
|  | import org.eclipse.swt.*; | 
|  | import org.eclipse.swt.widgets.*; | 
|  | import org.eclipse.swt.layout.*; | 
|  |  | 
|  | public class HelloWorld { | 
|  | public static void main(String[] args) { | 
|  | Display display = new Display(); | 
|  |  | 
|  | /* | 
|  | * Create a Shell with the default style | 
|  | * i.e. full screen, no decoration on PocketPC. | 
|  | * Alternative: 'new Shell(display, SWT.CLOSE)' | 
|  | * to get the Pocket PC 'Ok' button. | 
|  | */ | 
|  | Shell shell = new Shell(display); | 
|  |  | 
|  | /* | 
|  | * Set a text so that the top level Shell | 
|  | * also appears in the Pocket PC task list | 
|  | */ | 
|  | shell.setText("HelloWorld"); | 
|  |  | 
|  | /* | 
|  | * Set a menu bar to follow UI guidelines | 
|  | * on Pocket PC | 
|  | */ | 
|  | Menu mb = new Menu(shell, SWT.BAR); | 
|  | shell.setMenuBar(mb); | 
|  |  | 
|  | /* | 
|  | * Add widgets | 
|  | */ | 
|  | FillLayout layout = new FillLayout(); | 
|  | layout.type = SWT.VERTICAL; | 
|  | shell.setLayout(layout); | 
|  | Label label = new Label(shell, SWT.CENTER); | 
|  | label.setText("Hello World"); | 
|  |  | 
|  | shell.open(); | 
|  | while (!shell.isDisposed()) { | 
|  | if (!display.readAndDispatch()) | 
|  | display.sleep(); | 
|  | } | 
|  | } | 
|  | } | 
|  | </pre> | 
|  |  | 
|  | <li>Run your SWT application. | 
|  | <br>One way to start your application is to create a shortcut file. | 
|  | <ol> | 
|  | <li>On your desktop, create a file 'HelloWorld.lnk'. Insert the following line. | 
|  | <pre>68#\j9\bin\j9.exe -Djava.home=\j9 | 
|  | -cp:\java\swt.jar;\java HelloWorld</pre> | 
|  | This is assuming that you have installed the J9 VM in the folder \j9, and that | 
|  | you have copied the swt.jar and your application HelloWorld.class into the folder \java. | 
|  | It also assumes that the SWT dll was copied into the folder \j9\bin where it will be | 
|  | found by the VM. | 
|  | <li>Save the shortcut file. Copy the file to your device. | 
|  | <li>Using the file explorer on your device, click on the shortcut file. | 
|  | <br>If everything is correctly setup, the SWT app should come up. | 
|  | </ol> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="pocketpclibrary">Q: Where is the SWT library for the PocketPC?</a></strong></dt> | 
|  | <dd>A: There is an experimental version of SWT for WinCE devices. The swt.jar and ARM Pocket PC | 
|  | dll are available from the Eclipse download page. | 
|  | <p>Choose which swt.jar fits your project requirements. You can also build a custom | 
|  | version. A custom version allows you, for example, to exclude image decoders or layouts, to | 
|  | further reduce the size.</p> | 
|  | <ol> | 
|  | <li>win32-ce-arm-ppc.zip | 
|  | <ul> | 
|  | <li>J2SE profile</li> | 
|  | <li>Emulated Drag and Drop (no OLE support)</li> | 
|  | <li>Native widgets only (no custom widgets)</li> | 
|  | <li>No class file debug information (for reduced size)</li> | 
|  | </ul> | 
|  | <br> | 
|  | <li>win32-ce-arm-ppc-j2me.zip | 
|  | <ul> | 
|  | <li>J2ME profile (CLDC)</li> | 
|  | <li>Emulated Drag and Drop (no OLE support)</li> | 
|  | <li>Native widgets only (no custom widgets)</li> | 
|  | <li>No class file debug information (for reduced size)</li> | 
|  | </ul> | 
|  | <br> | 
|  | <li>Custom SWT library | 
|  | <ol> | 
|  | <li>From Eclipse, check out the projects org.eclipse.swt and org.eclipse.swt.win32.wce_ppc.arm | 
|  | from the head stream. These projects reside in the Eclipse repository | 
|  | <li>Build the swt.jar | 
|  | <br>Open the file org.eclipse.swt.win32.wce_ppc.arm/build_custom.xml | 
|  | <br>The file contains indications on how to build the swt.jar as recommended for WinCE PocketPC. | 
|  | <li>Get the corresponding dll | 
|  | <br>The latest dll is available under org.eclipse.swt.win32.wce_ppc.arm | 
|  | </ol> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="xpthemes">Q: How do I make SWT use the Windows XP themes?</a></strong></dt> | 
|  | <dd> A: In order for an application to use Windows XP themes, there must be a manifest file | 
|  | located in the same place as the executable that launches the application. | 
|  | Here is a <a href="javaw.exe.manifest">sample manifest file</a> to download. | 
|  |  | 
|  | <p>The name of the manifest file must match the name of the executable. | 
|  | In the case of eclipse, the executable is <tt>javaw.exe</tt> and the manifest file | 
|  | must have the name <tt>javaw.exe.manifest</tt>.  The manifest file must be in the | 
|  | <tt>jre\bin</tt> folder for the VM you use to launch Eclipse.  Note: the | 
|  | <tt>eclipse.exe</tt> executable does not launch Eclipse; <tt>eclipse.exe</tt> | 
|  | displays a splash screen and then invokes the Java VM.</p> | 
|  |  | 
|  | <p>Note: As of SWT 3.2, the manifest file is no longer needed.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="gtkfontsandcolors">Q: On GTK, how do I change the default fonts and colors of widgets?</a></strong></dt> | 
|  | <dd>A: GTK uses a file called <tt>.gtkrc</tt> which is located in your home directory. | 
|  | On some versions of Linux, this file is called <tt>.gtkrc-2.0</tt>. | 
|  | Here is an example of the content of that file which sets the font and colors for Eclipse: | 
|  | <pre> | 
|  | style "eclipse" { | 
|  | font_name = "Sans 12" | 
|  | bg[NORMAL] = "#d6d3ce" | 
|  | bg[ACTIVE] = "#c7c2bc" | 
|  | bg[INSENSITIVE] = "#828282" | 
|  | bg[PRELIGHT] = "#3a6ea5" | 
|  | fg[NORMAL] = "#000000" | 
|  | fg[ACTIVE] = "#000000" | 
|  | fg[INSENSITIVE] = "#d4d0c8" | 
|  | fg[PRELIGHT] = "#ffffff" | 
|  | } | 
|  | class "GtkWidget" style "eclipse" | 
|  | </pre> | 
|  |  | 
|  | <p>To turn off anti-aliasing of fonts you should use the facilities | 
|  | available in your desktop if possible, such as the Gnome Font | 
|  | Properties dialog.  An alternate approach is to ensure that your | 
|  | ~/fonts.conf or system-wide fonts.conf file contains the following:</p> | 
|  | <pre> | 
|  | <match target="font"> | 
|  | <edit name="antialias" mode="assign"><bool>false</bool></edit> | 
|  | <edit name="hinting" mode="assign"><bool>true</bool></edit> | 
|  | <edit name="autohint" mode="assign"><bool>false</bool></edit> | 
|  | </match> | 
|  | </pre> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="motiffontsandcolors">Q: On motif, how do I change the default fonts and colors of widgets?</a></strong></dt> | 
|  | <dd>A: Motif uses a file called <tt>.Xdefaults</tt> which is located in your home directory. | 
|  | Here is an example of the content of that file which sets the font and colors for Eclipse: | 
|  | <pre>Eclipse*spacing:0 | 
|  | Eclipse*XmForm.background:#e8e7e3 | 
|  | Eclipse*XmList.background:#e8e7e3 | 
|  | Eclipse*XmTextField.background:#e8e7e3 | 
|  | Eclipse*background:#d6d3ce | 
|  | Eclipse*fontList:-misc-fixed-medium-r-normal-*-10-100-75-75-c-60-iso8859-1 | 
|  | </pre> | 
|  |  | 
|  | After creating/modifying this file, you must run "xrdb ~/.Xdefaults" or restart X to make the changes take effect. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="missingjar">Q: Why do I get the error "java.lang.NoClassDefFoundError: org/eclipse/swt/internal/XXX/OS."?</a></strong></dt> | 
|  | <dd>A: On some platforms such as GTK, SWT is broken into multiple jars.  Therefore, | 
|  | you must ensure that all required jars are on the classpath.  The required jars are: | 
|  | <ul> | 
|  | <li>swt.jar (all platforms)</li> | 
|  | <li>swt-pi.jar (some platforms like GTK and Carbon)</li> | 
|  | <li>swt-mozilla.jar (for Browser widget on GTK and Motif)</li> | 
|  | <li>swt-gtk.jar (on Linux Motif)</li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="missingdll">Q: Why do I get the error "java.lang.UnsatisfiedLinkError: no swt-win32-3232 in java.library.path."?</a></strong></dt> | 
|  | <dd>A: The SWT JNI libraries must be found at runtime.  As of Eclipse/SWT 3.3 this will happen | 
|  | automatically if the platform-specific SWT jar is on the java classpath.  For older Eclipse/SWT | 
|  | versions you need to place the SWT JNI libraries in a place where the Java Virtual Machine will | 
|  | find them. | 
|  |  | 
|  | <p>The SWT JNI libraries are included in the SWT download. | 
|  |  | 
|  | <p>A Java application can be informed of the location of the libraries in several ways: | 
|  | <p></p> | 
|  | <ol> | 
|  | <li>Set the library path in the VM launch arguments. | 
|  |  | 
|  | <p>In the Launch Configuration Dialog of eclipse select the Arguments | 
|  | page, and in the VM arguments field enter: | 
|  | <tt>-Djava.library.path={runtime-library-path}</tt> | 
|  | Where the runtime-library-path is the absolute path to the directory containing | 
|  | the native code library (see above). | 
|  |  | 
|  | <p>This solution means that the SWT libraries have to be manually | 
|  | added to every project that uses SWT.</p><p></p> | 
|  |  | 
|  | <li>Set the library location in an environment variable. | 
|  | <p>For Windows this is done by editing the PATH environment variable to | 
|  | include the above mentioned runtime-library-path. | 
|  | <br>in Win 9X this is done by editing the autoexec.bat file, | 
|  | <br>on NT or 2K the variable is edited through <strong>My Computer</strong> > <strong>Properties</strong> > <strong>Advanced</strong> > <strong>Environment Variables</strong>. | 
|  | <p>On linux/unix, modify the LD_LIBRARY_PATH environment variable to include the runtime-library-path. | 
|  | <p></p> | 
|  |  | 
|  | <li>Copy the SWT library to a directory that is already on the Java library path.  For example, the jre/bin directory. | 
|  | <p>The disadvantage of this solution is that every time you upgrade eclipse you have to remember to copy the native code library.</p> | 
|  | </ol> | 
|  | <p>Starting with Eclipse 3.1, the SWT plugin that comes with Eclipse, includes the JNI libraries in the SWT jar. | 
|  | This was done to support OSGi and Eclipse RCP. If you are using the plugin you must extract the libraries | 
|  | to include them in the path.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="konquerorUnzip">Q: Why do I get an error beginning with "...SWTException: Unsupported or unrecognized format" on startup?</a></strong></dt> | 
|  | <dd>A: There is a bug in the Konqueror decompressor which causes Eclipse to be improperly extracted | 
|  | if used.  To avoid this the Eclipse archive should first be downloaded to your machine and | 
|  | then extracted using unzip at the command line. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="useUnzip">Q: Why do I get the error "error while loading shared libraries: ./libXm.so.2: file too short" on startup?</a></strong> | 
|  | </dt> | 
|  | <dd>A: You must use unzip, not jar, to extract your eclipse download.  Jar does not extract the libXm.so.2 link file properly. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="missinglibXm">Q: Why do I get the error "java.lang.UnsatisfiedLinkError: libXm.so.2: cannot open shared object file: No such file or directory."?</a></strong></dt> | 
|  | <dd>A: On motif, the SWT library links against the open motif library libXm.so.2.  On most platforms, the open motif library is installed | 
|  | and added to the library path by default. However, on some Linux platforms, either open motif is not installed or is not on the default library | 
|  | path, or lesstif is installed.  Eclipse (and the standalone version of SWT) includes the libXm.so.2 library in the root of the Eclipse install. | 
|  | <p>You need to either launch Eclipse from the installed directory or modify the LD_LIBRARY_PATH environment variable to | 
|  | include the location of libXm.so.2. </p> | 
|  | <p>Note <code>-Djava.library.path</code> is used by the VM to locate libraries for System.loadLibrary calls.  However, it does | 
|  | not update the LD_LIBRARY_PATH and therefore does not help libraries locate other libraries.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="usingLesstif">Q: Why do I get the warning "XmParseMappingCreate() is not implemented yet" on Linux/Motif?</a></strong></dt> | 
|  | <dd>A: This warning is shown if you're accessing installed LessTif libraries instead of the | 
|  | shipped OpenMotif libraries.  If you see this warning, add the eclipse install directory | 
|  | to your LD_LIBRARY_PATH before launching eclipse. For example, if you are using csh: <br> | 
|  |  | 
|  | <pre>setenv LD_LIBRARY_PATH /opt/eclipse:${LD_LIBRARY_PATH}</pre> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="reflectionX">Q: Why do I get an error beginning with "org.eclipse.swt.SWTError: Font not valid" on startup?</a></strong></dt> | 
|  | <dd>A: This error occurs if a recognized font cannot be resolved at startup time.  The scenario where | 
|  | this has been observed to sometimes happen is when accessing a remote machine via Reflection X.  This | 
|  | situation can be made to work by changing some settings in Reflection X.  For information about how to | 
|  | do this see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=33828#c14">bug 33828</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="notenoughheap">Q: Why do I get the error "java.lang.OutOfMemoryError: Java heap space" when I try to create a very large Image?</a></strong></dt> | 
|  | <dd>A: This error occurs if there is not enough Java heap space to create a very large image, for example:<br> | 
|  | <pre>new Image(display, 10985, 1102);</pre> | 
|  | <br>To allocate more heap space for the Java VM, start eclipse with a VM argument that allocates more heap, for example: | 
|  | <pre>eclipse -vmargs -Xmx400m</pre> | 
|  | <br>allocates 400 Mb of heap space. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="debugmode">Q: How do I enable debug mode in Eclipse for SWT?</a></strong></dt> | 
|  | <dd>A: Follow these steps: | 
|  | <ol> | 
|  | <li>Create a .options file in the same directory as your eclipse executable.</li> | 
|  | <li>Place the following lines in the .options file: | 
|  | <br>org.eclipse.ui/debug=true | 
|  | <br>org.eclipse.ui/debug/swtdebugglobal=true</li> | 
|  | <li>Start up eclipse from the command line with the debug flag: ./eclipse -debug</li> | 
|  | </ol> | 
|  | <p>All messages from SWT will be printed to the console window. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="swinginswt">Q: Can I use Swing or AWT inside Eclipse?</a></strong></dt> | 
|  | <dd>A: Yes.  As of Eclipse 3.2, Swing and AWT can be embedded in SWT on Windows, Motif, GTK and OS X. | 
|  | However it is important to note that a supporting JDK is required on some platforms in order for this | 
|  | to work.  Specifically, Motif and GTK require that JDK 1.5 or newer be used, and OS X requires that | 
|  | the JDK specified in <a href="#swtawtosx">Why does the SWT_AWT bridge not work for me on OS X?</a> be used. | 
|  | Additionally, AIX and Solaris users must ensure that AWT is using XToolkit, as described in | 
|  | <a href="#swtawtsolaris">Why does the SWT_AWT bridge not work for me on AIX or Solaris?</a> | 
|  |  | 
|  | <p>See this <a href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet135.java">snippet</a> for an example of how to use the API. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="subclassing">Q: Why can't I subclass SWT widgets like Button and Table?</a></strong></dt> | 
|  | <dd>A: You can but it is not recommended.  The article <a href="http://eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm">Creating Your Own Widget using SWT</a> | 
|  | describes the reasons in detail: | 
|  |  | 
|  | <h3>Subclassing Widgets Directly</h3> | 
|  |  | 
|  | <p>In extreme circumstances, you may need to subclass a widget other than | 
|  | <i>Canvas</i> or <i>Composite</i>. We recommend against doing this unless all | 
|  | other avenues have been explored and exhausted. Try to wrap the widget first, | 
|  | before subclassing it. Here is why:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>Subclasses may inherit a lot of API that makes no sense, and must be | 
|  | overridden.  In Java, you cannot override a method and change the return | 
|  | type; therefore you cannot reimplement some methods.</li> | 
|  |  | 
|  | <li>Subclassing is typically not the safest way to extend a class that | 
|  | you do not own.  For a simplified list of the common arguments, see the | 
|  | article by <strong>Bill Venners</strong> in the Nov '98 issue of <i>Java | 
|  | World</i> called <i>"Inheritance versus composition: Which one should | 
|  | you choose?"</i> at: <a href="http://www.javaworld.com/javaworld/jw-11-1998/jw-11-techniques.html"> | 
|  | http://www.javaworld.com/javaworld/jw-11-1998/jw-11-techniques.html</a></li> | 
|  |  | 
|  | <li>Widget subclasses are almost certainly guaranteed to be | 
|  | platform-specific unless great care is taken to ensure that they work on | 
|  | all platforms.</li> | 
|  |  | 
|  | <li>Subclassed widgets can be affected by changes in the non-API | 
|  | implementation of the superclass.</li> | 
|  |  | 
|  | <li>Subclassing may cause bad system-level bugs, and runs the risk of | 
|  | leaking resources.  For example, if a subclass reimplements a method | 
|  | without making certain that dispose code from the superclass method is | 
|  | still called, then the new method will leak system resources.</li> | 
|  |  | 
|  | <li>Binary incompatibility across releases becomes possible. If a method | 
|  | signature or field name changes, or new methods or fields are added, | 
|  | there may be a name conflict in the widget subclass. Only <i>Canvas</i> | 
|  | and <i>Composite</i> are guaranteed not to have name conflicts in future | 
|  | releases.</li> | 
|  |  | 
|  | <li>See any paper by Leonid Mikhajlov on the <i>"Fragile Base Class | 
|  | Problem"</i>.  You can find his paper "A Study of The Fragile Base Class | 
|  | Problem" at: <a href="http://www.cas.mcmaster.ca/~emil/publications/fragile/">http://www.cas.mcmaster.ca/~emil/publications/fragile/</a></li> | 
|  |  | 
|  | </ul> | 
|  |  | 
|  | <p>Subclassing <i>Canvas</i> or <i>Composite</i> is the best way to | 
|  | ensure that your widget works on all SWT platforms. The 'is-a' test in | 
|  | this case tests whether your widget is-a basic or compound widget. | 
|  | Subclassing anything else requires asking if the new widget <b>is an SWT | 
|  | native widget of the type being subclassed</b>. For example, a 100% Java | 
|  | portable <i>PictureLabel</i> is not an SWT native <i>Label</i>.</p> | 
|  |  | 
|  | <p>When subclassing anything other than <i>Composite</i> or | 
|  | <i>Canvas</i> you must override the method <b>protected void | 
|  | checkSubclass()</b> to do nothing. Make sure you read the method comment | 
|  | before overriding it.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="noeventfire">Q: Why are some events like Selection not fired in response to programmatic widget changes?</a></strong></dt> | 
|  | <dd>A: See <a href="#noevents">Why doesn't a widget send events when I change it programmatically?</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printstacktrace">Q: Why don't SWTError and SWTException override all printStackTrace methods?</a></strong></dt> | 
|  | <dd>A: SWTError and SWTException each contain a slot which records the original | 
|  | exception (if it is known) that caused the SWTError or SWTException to be thrown. | 
|  | The printStackTrace() method in these classes has been overridden to print the | 
|  | stacktrace of the original exception as well. | 
|  |  | 
|  | <p>The problem with the other two API methods (i.e. printStackTrace(PrintStream) and | 
|  | printStackTrace(PrintWriter)) is that the classes mentioned in their arguments | 
|  | (PrintStream and PrintWriter) are not available in the CLDC class library. | 
|  | Because we need to maintain compatability with CLDC, we can not override them. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printOnX">Q: How do I print using my favorite Unix print program?</a></strong></dt> | 
|  | <dd>A: You can use the External Tools support in Eclipse to print files using external programs. | 
|  | Just create a new Program launch config from the External Tools dialog that launches your | 
|  | favorite printing utility and you can pass the selected resource as a parameter. | 
|  | <ol> | 
|  | <li>Select the file you want to print.</li> | 
|  | <li><i>Run > External Tools > External Tools...</i></li> | 
|  | <li>Select "Program" in the Configurations: list.</li> | 
|  | <li>Click New</li> | 
|  | <li>Type: Print Selected File<br> | 
|  | in the Name: field.</li> | 
|  | <li>Type the full path name of your favorite printing program in the Location: field. | 
|  | For example: /usr/bin/lpr</li> | 
|  | <li>Type: ${container_loc}/${resource_name}<br> | 
|  | in the Arguments: field.</li> | 
|  | <li>Click Apply</li> | 
|  | <li>Click Run</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="installedprinters">Q: How can I tell whether or not there are any printers installed?</a></strong></dt> | 
|  | <dd>A: The method <code>org.eclipse.swt.printing.Printer.getPrinterList()</code> can be used to determine | 
|  | whether or not there are any printers installed on the system. This method returns an array of | 
|  | <code>PrinterData</code> objects. If the length of the array is 0, then there are no printers available. | 
|  | If there are 1 or more elements in the array, then each <code>PrinterData</code> object represents an | 
|  | installed printer. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="noprintimage">Q: How do I print a snapshot of a widget?</a></strong></dt> | 
|  | <dd>A: To print an image, the image needs to be created on the <em>printer</em>. | 
|  | A common mistake is to try to print an image that was created on a <em>display</em>. | 
|  |  | 
|  | <p>First take the snapshot into an image that was created on the display, | 
|  | and then get the imageData and create a new Image just for printing. | 
|  | Something like this: | 
|  | <pre>  // Take the snapshot into a display Image | 
|  | Point size = myWidget.getSize(); | 
|  | Image image = new Image(display, size.x, size.y); | 
|  | GC gc = new GC(myWidget); | 
|  | gc.copyArea(image, 0, 0); | 
|  | gc.dispose(); | 
|  |  | 
|  | // Get the ImageData and create a new printer Image from it | 
|  | ImageData imageData = image.getImageData(); | 
|  | Image printImage = new Image(printer, imageData);</pre> | 
|  |  | 
|  | <p>Then print using <em>printImage</em>. | 
|  | (Remember to dispose both images when you are done with them). | 
|  |  | 
|  | <p>This is true for all graphic objects that you want to use for printing: | 
|  | Fonts, Colors, and Images. You need to recreate them on the printer before | 
|  | you can use them for drawing on the printer GC. You might get lucky sometimes, | 
|  | if the printer happens to have this font or that color, but you won't get lucky | 
|  | on all platforms and for all printers, and you won't get lucky for images. | 
|  | So get into the habit of thinking "Did I create this graphics resource | 
|  | on the same device that I am now trying to draw to?" | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="smallprint">Q: Why does everything I print seem so small?</a></strong></dt> | 
|  | <dd>A: When you are printing something from the screen to a printer device, you | 
|  | need to think about scaling. What is happening is that your figure is being drawn | 
|  | in something like 72 x 72 dots per inch on the screen, but then you are printing | 
|  | it to something like a 300 x 300 or 600 x 600 DPI printer. What you have to do is | 
|  | ask both the screen and the printer what their DPI is, and then figure out what | 
|  | scale factor you need to use when you draw to the printer GC. The code might look | 
|  | like this: | 
|  | <pre> | 
|  | Point screenDPI = display.getDPI(); | 
|  | Point printerDPI = printer.getDPI(); | 
|  | int scaleFactor = printerDPI.x / screenDPI.x; | 
|  | </pre> | 
|  | Please see the ImageAnalyzer example in the org.eclipse.swt.examples project | 
|  | for an example of printing an image to a printer. Look at method | 
|  | menuPrint(). Note however that this is a pretty rough example, and it does | 
|  | not take into account what happens if the image is larger than the page - it | 
|  | just clips. | 
|  |  | 
|  | <p>Text printing takes some thought also. You need to wrap words, put your page | 
|  | breaks in the right place, know where your margins are, etc. The SWT | 
|  | StyledText widget does its own text printing. If you need to see a more | 
|  | complicated example of printing a document, wrapping, margins, multi-page, | 
|  | etc., then please look at the inner class Printing in StyledText in | 
|  | org.eclipse.swt.custom. An instance of this class is created by the | 
|  | StyledText.print(Printer) API method. | 
|  |  | 
|  | <p>Note also that when printing, any graphics objects that you use to draw, | 
|  | such as fonts, colors, and images, need to be re-created on the printer | 
|  | device before you can draw them to the printer GC. | 
|  |  | 
|  | <p>We also recommend that you run your print job in a separate thread and not in | 
|  | the UI thread, because printing a long document to a slow printer can hang | 
|  | your entire UI while the printer spools. | 
|  |  | 
|  | <p>Unfortunately, printing is not simply a matter of just passing in the | 
|  | printer GC instead of the screen GC. Printing has to be designed into your | 
|  | drawing classes. You don't have scrollbars anymore, so you have to either | 
|  | cut stuff off and print it on another page, or reorganize it, or scale it | 
|  | down, or wrap it somehow. Maybe you want to give some control to your users, | 
|  | and let them specify how many inches something should be, or whatever - | 
|  | maybe give them a ruler. There is no magic bullet - you | 
|  | will definitely have to give it some thought. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printertrim">Q: What does computeTrim mean for a Printer?</a></strong></dt> | 
|  | <dd>A: The "trim" is the area of the page that the printer cannot print on. | 
|  | Usually, computeTrim is used as follows: <br><code>Rectangle trim = printer.computeTrim(0, 0, 0, 0);</code> | 
|  |  | 
|  | <p>A printer that can print edge-to-edge would have a trim.x and trim.y of 0,0. | 
|  | The trim.width and trim.height would be the same as the width and height of the physical paper. | 
|  | </p> | 
|  |  | 
|  | <p>A 600 dot per inch printer that cannot print on the leftmost 0.18 inch of the paper would have a trim.x of -108. | 
|  | So to print starting at precisely 1" from the left edge, take 600 (i.e. 1") and "add" -108 (i.e. subtract 0.18") to get the starting x position. | 
|  | Trim positions are negative because they are relative to the 0,0 position of the client area (or 'printable area') of the paper. | 
|  | </p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="autotest">Q: How can I implement user interaction tests?</a></strong></dt> | 
|  | <dd>A: The method <code>org.eclipse.swt.widgets.Display.post(Event)</code> can be used to post | 
|  | mouse and keyboard events into the OS, which emulates the user performing the specified action. | 
|  | This is the typical approach that is used for implementing JUnit test cases. | 
|  | <p>There are also stand-alone applications available for automating SWT user interaction tests: | 
|  | <ul> | 
|  | <li><a href="http://swtbot.sourceforge.net/index.html">SWTBot</a> (open source)</li> | 
|  | <li><a href="http://sourceforge.net/projects/abbot/">Abbot for SWT</a> (open source)</li> | 
|  | <li><a href="http://www.instantiations.com/windowtester/">Instantiations Window Tester</a> (commercial)</li> | 
|  | </ul> | 
|  | </p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="gtkselectiongone">Q: On gtk, why does my widget's selection disappear when it loses focus?</a></strong></dt> | 
|  | <dd>A: This effect may be seen if KDE color settings are being | 
|  | utilized.  This can be fixed by unchecking the "Apply KDE colors to | 
|  | non-KDE apps" option in the KDE colors control panel. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="gtkwidgethidden">Q: On gtk and motif, why are some widgets hidden when they are visible on Windows or the Macintosh?</a></strong></dt> | 
|  | <dd>A: The SWT.CENTER, although undefined for composites, has | 
|  | the same value as SWT.EMBEDDED which is used to embed widgets from | 
|  | other widget toolkits into SWT.  On some operating systems (GTK, Motif), this | 
|  | may cause the children of this compostite to be obscured.  Do not use | 
|  | the SWT.CENTER style when creating a composite. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="advancedgraphics">Q: Which platforms have advanced graphics support?</a></strong></dt> | 
|  | <dd>A: | 
|  | <ul> | 
|  | <li>SWT for Windows uses GDI+ for advanced graphics, which is installed on Windows XP and newer. | 
|  | Windows 2000 users can download and install a Microsoft package containing GDI+.</li> | 
|  | <li>SWT for GTK+ and Motif use Cairo for advanced graphics, which is installed on systems with GTK+ 2.8 or newer | 
|  | (for example RHEL 5).</li> | 
|  | <li>SWT for OS X uses Quartz for advanced graphics, which is installed on all supported OS X versions.</li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="whatisbrowser">Q: What is the SWT Browser widget?</a></strong></dt> | 
|  | <dd>A: The SWT Browser widget is used to display HTML documents. It is | 
|  | designed to provide a basic and portable API sufficient for essential | 
|  | HTML browsing and rendering on the platforms on which it is implemented. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserplatforms">Q: Which platforms support the SWT Browser, and which native renderers do they use?</a></strong></dt> | 
|  | <dd>A: The SWT Browser is currently available on the platforms listed below.  By default, Browser instances created with style <code>SWT.NONE</code> | 
|  | use the following native renderers: | 
|  | <ul> | 
|  | <li>Windows 2000 and newer (Internet Explorer 5.5 and newer)</li> | 
|  | <li>Mac OS X 10.5 and newer (WebKit)</li> | 
|  | <li>Linux GTK (<a href="#browserlinux">details</a>) | 
|  | <li>Solaris-x86 and Solaris 10 SPARC (<a href="#browsersolaris">details</a>) | 
|  | </ul> | 
|  | <br> | 
|  | Browsers should typically be created with style <code>SWT.NONE</code> as this will attempt to use a native renderer that should not require | 
|  | additional software installation.  However for clients with specific native browser requirements, the type of native renderer to use can be specified | 
|  | on a per-instance basis, see <a href="#howusewebkit">How do I explicity use WebKit as the Browser's underlying renderer?</a> and | 
|  | <a href="#howusemozilla">How do I explicitly use Mozilla as the Browser's underlying renderer?</a>. | 
|  | <p> | 
|  | Also note that as of Eclipse/SWT 3.7 it is possible to override the default native renderer that is used for <code>SWT.NONE</code>-style Browsers, | 
|  | see <a href="#browserspecifydefault">How do I specify the default type of native renderer that is used by the Browser?</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserspecifydefault">Q: How do I specify the default type of native renderer that is used by the Browser?</a></strong></dt> | 
|  | <dd>A: The default native renderers that are used for <code>SWT.NONE</code>-style Browsers are listed in | 
|  | <a href="#browserplatforms">Which platforms support the SWT Browser, and which native renderers do they use?</a>.  In general these defaults | 
|  | should not be overridden because they are chosen with the goal of using a renderer that should not require | 
|  | additional software installation.  However there are situations, such as the potential mixing of Mozilla and WebKit Browsers, where specifying | 
|  | the default type of native renderer to use can avoid crashes caused by conflicting dependent libraries. | 
|  | <p> | 
|  | As of Eclipse/SWT 3.7.1 a user can set a property to specify the type of native renderer to use for <code>SWT.NONE</code>-style Browsers. | 
|  | Setting this property does not affect Browsers that are created with styles such as <code>SWT.MOZILLA</code> or <code>SWT.WEBKIT</code>. | 
|  | The property name is <code>org.eclipse.swt.browser.DefaultType</code> and valid values for it currently include "<code>mozilla</code>" and | 
|  | "<code>webkit</code>".  This property must be set before the <em>first</em> Browser instance is created. | 
|  | <p> | 
|  | The best opportunity for a user to set this property is by launching their application with a <code>-D</code> | 
|  | VM switch (eg.- add to the end of the eclipse.ini file: <code>-Dorg.eclipse.swt.browser.DefaultType=webkit</code>). | 
|  | <p> | 
|  | An alternate approach that an eclipse application may use is to provide a <code>BrowserInitializer</code> | 
|  | implementation that sets this property.  This implementation will be invoked when the first Browser instance | 
|  | is about to be created.  The steps to do this are: | 
|  | <ul> | 
|  | <li>Create a fragment with host plug-in <code>org.eclipse.swt</code>.</li> | 
|  | <li>In this fragment create class <code>org.eclipse.swt.browser.BrowserInitializer</code>.</li> | 
|  | <li>Implement a static initializer in this class that sets the <code>org.eclipse.swt.browser.DefaultType</code> property. | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browsernativeie">Q: Which Internet Explorer version do Browsers on Windows use?</a></strong></dt> | 
|  | <dd>A: Windows machines typically only have one production release of Internet Explorer (IE) installed at a time, so the Browser control | 
|  | embeds the same native WebBrowser that is used by stand-alone IE.  However it's important to note that for Eclipse/SWT releases prior | 
|  | to 3.7, the <em>default</em> compatibility mode of the Browser control is capped at IE7.  This means, for instance, that HTML documents | 
|  | containing HTML5 <code>canvas</code> tags will not be shown properly, even if IE9 is installed on the machine.  An HTML document can override | 
|  | this behavior by including a <code>X-UA-Compatible</code> meta tag as described in <a href="http://msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx"> | 
|  | Defining Document Compatibility</a>, which enables the Browser to use a more modern compatibility mode if an IE version newer than IE7 is installed. | 
|  | <p> | 
|  | As of Eclipse/SWT 3.7 the Browser control defaults to using the compatibility mode that matches the installed IE version.  This behavior will | 
|  | be overridden in the following two cases: | 
|  | <ol> | 
|  | <li>If an HTML document contains a <code>X-UA-Compatible</code> meta tag that specifies an older IE version then the Browser will honor | 
|  | this request.  This will only affect the compatibility mode that is used for showing the document containing the meta tag, it will not | 
|  | affect the compatibility mode for other documents.</li> | 
|  | <li>The Browser's default compatibility mode can be overridden by setting java property <code>org.eclipse.swt.browser.IEVersion</code> to a value | 
|  | from <a href="http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx#browser_emulation">Browser Emulation</a> before the first | 
|  | Browser instance is created.  For example, adding the line <code>-Dorg.eclipse.swt.browser.IEVersion=7000</code> to the end of | 
|  | eclipse's <code>eclipse.ini</code> file will revert all IE-based Browsers to use IE7 compatibility mode by default.</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserlinux">Q: What do I need to run the SWT Browser inside Eclipse on Linux?</a></strong></dt> | 
|  | <dd>A: The browser versions that are supported by each Eclipse release are listed below.  Note that Mozilla/XULRunner versions that are not | 
|  | final releases (eg.- betas, alphas, nightlies) are <em>not</em> supported, even if their version technically satisfies a listed version range. | 
|  | Also note that the Mozilla/XULRunner must be compiled for the same architecture as the SWT jar that is being used. | 
|  | <ul> | 
|  | <li>Eclipse 3.0.x: Mozilla 1.4 GTK2 - 1.6 GTK2.</li> | 
|  | <li>Eclipse 3.1.x: Mozilla 1.4 GTK2 - 1.7.8 GTK2.</li> | 
|  | <li>Eclipse 3.2.x: Mozilla 1.4 GTK2 - 1.7.x GTK2.</li> | 
|  | <li>Eclipse 3.3.x: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x.</li> | 
|  | <li>Eclipse 3.4.x: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x - 1.9.0.x.</li> | 
|  | <li>Eclipse 3.5.0 and 3.5.1: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x - 1.9.1.x.</li> | 
|  | <li>Eclipse 3.5.2: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x - 1.9.x and 3.6.x (but <em>not</em> 2.x).</li> | 
|  | <li>Eclipse 3.6.x: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x - 1.9.x and 3.6.x (but <em>not</em> 2.x), WebKitGTK+ 1.2.x (see <a href="#browserwebkitgtk">How do I use the WebKit renderer on Linux-GTK?</a>)</li> | 
|  | <li>Eclipse 3.7.x/4.1.x: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x - 1.9.x and 3.6.x (but <em>not</em> 2.x), WebKitGTK+ 1.2.x and newer</li> | 
|  | <li>Eclipse 3.8.x/4.2.x: Mozilla 1.4 GTK2 - 1.7.x GTK2, XULRunner 1.8.x - 1.9.x, 3.6.x and 10.x (but <em>not</em> 2.x nor 4.x - 9.x), WebKitGTK+ 1.2.x and newer</li> | 
|  | <li>Also note that a Firefox release whose contained Gecko version correlates with the Mozilla versions above can also be used | 
|  | with Eclipse 3.1 and newer (Linux only), provided that it has been compiled with linkable Gecko libraries.  It is important to | 
|  | note that Firefox downloads from mozilla.org do <em>not</em> satisfy this criteria, but Firefox installations that are | 
|  | included in major Linux distributions often do in the absence of a XULRunner installation.  Attempting to use a Firefox install | 
|  | without linkable Gecko libraries will throw an error with message "No more handles [NS_InitEmbedding...error -2147221164]".</li> | 
|  | </ul> | 
|  |  | 
|  | <br>The version of Mozilla or Firefox installed on your system varies with your Linux distribution. | 
|  | The following Linux distributions meet the minimum Mozilla requirements for using the Browser widget. | 
|  | <ul> | 
|  | <li>RedHat Enterprise Linux 3</li> | 
|  | <li>Suse 9</li> | 
|  | </ul> | 
|  | <br>If you use the IBM 1.4 VM <a href="#browserlinuxibm">check this.</a> | 
|  | <br> | 
|  | <br>In general the Browser control will automatically detect an appropriate native browser to use.  However if you wish to point at a specific | 
|  | XULRunner or Mozilla install to use then this can be specified as described in <a href="#specifyxulrunner">Can I specify which XULRunner installation | 
|  | gets used?</a> or <a href="#browserlinuxrcp">What do I need to run the SWT Browser in a standalone application on Linux or Solaris?</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browsersolaris">Q: What do I need to run the SWT Browser inside Eclipse on Solaris?</a></strong></dt> | 
|  | <dd>A: The Browser is supported on OpenSolaris (x86) and Solaris 10 (SPARC).  The Mozilla versions that are supported by each Eclipse release are: | 
|  | <ul> | 
|  | <li>OpenSolaris (x86)</li> | 
|  | <ul> | 
|  | <li>Eclipse 3.5.0: Mozilla 1.7.x GTK2, XULRunner 1.8.x - 1.9.1.x</li> | 
|  | <li>Eclipse 3.5.2 and newer: Mozilla 1.7.x GTK2, XULRunner 1.8.x - 1.9.2.x and 3.6.x</li> | 
|  | <li>Note that a Firefox release whose contained Gecko version correlates with the Mozilla versions above can also be used. | 
|  | Unlike other platforms, since Sun's compiler does not produce statically-linked libraries, Firefox builds downloaded from mozilla.org | 
|  | <em>can</em> be used on Solaris. | 
|  | </ul> | 
|  | <li>Solaris 10 (SPARC)</li> | 
|  | <ul> | 
|  | <li>Eclipse 3.5.1 and newer: the Mozilla version that is shipped with the OS in <code>/usr/sfx/lib/</code></li> | 
|  | </ul> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserlinuxrcp">Q: What do I need to run the SWT Browser in a standalone application on Linux or Solaris?</a></strong></dt> | 
|  | <dd>A: Follow the steps below to use the SWT Browser widget in your standalone SWT application. | 
|  | <ul> | 
|  | <li>A supported native browser must be installed (<a href="#browserlinux">linux requirements</a>) (<a href="#browsersolaris">solaris requirements</a>).</li> | 
|  | <li>If a supported WebKitGTK and/or XULRunner is installed then it should be found automatically at runtime with no additional effort.  For other native Mozilla-based browsers:</li> | 
|  | <ol> | 
|  | <li>Set the environment variable MOZILLA_FIVE_HOME to the native browser's installation folder. e.g. <code>setenv MOZILLA_FIVE_HOME /usr/lib/mozilla</code></li> | 
|  | <li>Set the environmnent variable LD_LIBRARY_PATH to include MOZILLA_FIVE_HOME. e.g. <code>setenv LD_LIBRARY_PATH ${MOZILLA_FIVE_HOME}:${LD_LIBRARY_PATH}</code></li> | 
|  | <li>Your standalone SWT application can now use the Browser widget. | 
|  | </ol> | 
|  | </ul> | 
|  | <br>If you use the IBM 1.4 VM <a href="#browserlinuxibm">check this.</a> | 
|  | <br> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howusewebkit">Q: How do I explicitly use WebKit as the Browser's underlying renderer?</a></strong></dt> | 
|  | <dd>A: To specify that a WebKit renderer be used by a Browser instance, create it with style <code>SWT.WEBKIT</code> (<em>@since 3.7</em>).  The runtime requirements for | 
|  | using WebKit-based Browsers are listed below.  Note that failure to meet these runtime requirements will cause the Browser instantiation to fail. | 
|  | <ul> | 
|  | <li>Windows: | 
|  | <ul> | 
|  | <li>32-bit SWT</li> | 
|  | <li>Safari must be installed</li> | 
|  | <li>For OSs older than XP+SP1, the path to the Apple Application Support installation must be prepended to Windows' "Path" environment variable | 
|  | before running eclipse.  This installation will be in a location like "<code>C:\Program Files\Common Files\Apple\Apple Application Support</code>".</li> | 
|  | </ul> | 
|  | <li>Linux: WebKitGTK 1.2.0 or newer must be in the library load path.  Examples of Linux distros that meet this requirement by default | 
|  | include Red Hat Enterprise Linux 6 and Ubuntu 10.04.</li> | 
|  | <li>OS X: No additional runtime requirements, the default renderer is WebKit-based.</li> | 
|  | </ul> | 
|  | <p> | 
|  | It is important to note that conflicts have been reported between the dependent libraries of WebKit and Mozilla.  As a result it is advised that Browser | 
|  | instances with these respective types not be mixed in an application.  If a Browser with one of these types <em>must</em> be used in an application then | 
|  | java property <code>org.eclipse.swt.browser.DefaultType</code> should also be set to this type to ensure that <code>SWT.NONE</code>-style Browsers | 
|  | do not cause the libraries from the other native browser renderer to be loaded (see | 
|  | <a href="#browserspecifydefault">How do I specify the default type of native renderer that is used by the Browser?</a>). | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howusemozilla">Q: How do I explicitly use Mozilla as the Browser's underlying renderer?</a></strong></dt> | 
|  | <dd>A: To specify that a Mozilla renderer be used by a Browser instance, create it with style <code>SWT.MOZILLA</code> (<em>@since 3.3</em>)  The runtime requirements for | 
|  | using Mozilla-based Browsers are listed below.  Note that failure to meet these runtime requirements will cause the Browser instantiation to fail. | 
|  | <ul> | 
|  | <li><a href="http://developer.mozilla.org/en/docs/XULRunner">XULRunner</a> must be properly | 
|  | <a href="http://developer.mozilla.org/en/docs/XULRunner_1.8.0.1_Release_Notes#Installing_XULRunner">installed</a></li> | 
|  | <li>The installed XULRunner version must be 1.8.1.2 or newer if any of the following are true: | 
|  | <ul> | 
|  | <li>Running on OS X</li> | 
|  | <li><code>Browser.getWebBrowser()</code> is used</li> | 
|  | <li>JavaXPCOM is referenced</li> | 
|  | </ul> | 
|  | If none of these cases apply then any XULRunner version can be used. | 
|  | </li> | 
|  | <li>Windows only: 32-bit SWT</li> | 
|  | <li>OS X only: The JRE must be "Java for Mac OS X 10.4, Release 5" or newer</li> | 
|  | </ul> | 
|  | <p> | 
|  | It is important to note that conflicts have been reported between the dependent libraries of WebKit and Mozilla.  As a result it is advised that Browser | 
|  | instances with these respective types not be mixed in an application.  If a Browser with one of these types <em>must</em> be used in an application then | 
|  | java property <code>org.eclipse.swt.browser.DefaultType</code> should also be set to this type to ensure that <code>SWT.NONE</code>-style Browsers | 
|  | do not cause the libraries from the other native browser renderer to be loaded (see | 
|  | <a href="#browserspecifydefault">How do I specify the default type of native renderer that is used by the Browser?</a>). | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserwebkitgtk">Q: How do I use the WebKit renderer on Linux-GTK?</a></strong></dt> | 
|  | <dd>A: In Eclipse/SWT 3.7 and newer the Browser attempts to use WebKitGTK for SWT.NONE-style Browsers created on GTK.  For this to succeed, WebKitGTK | 
|  | 1.2.0 or newer must be in the library load path.  Examples of Linux distros that meet this requirement by default include Red Hat | 
|  | Enterprise Linux 6 and Ubuntu 10.04.  Linux installations that do not meet this requirement will fall back to using Mozilla for SWT.NONE-style Browsers. | 
|  | <p> | 
|  | Eclipse/SWT 3.6.x can also use WebKitGTK for SWT.NONE-style Browsers created on GTK, but the user must explicitly request this by setting java property | 
|  | "<code>org.eclipse.swt.browser.UseWebKitGTK</code>" to "<code>true</code>".  In the absence of this property being set, Mozilla is used for all SWT.NONE-style | 
|  | Browsers.  (Note that Eclipse/SWT 3.6.x is only able to use WebKitGTK 1.2.x; it will fail if a newer WebKitGTK release is found.) | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserlinuxibm">Q: How can I get the SWT Browser to work with the IBM 1.4 VM?</a></strong></dt> | 
|  | <dd>A: The IBM 1.4 VM accidentally removes certain entries of the environment variable LD_LIBRARY_PATH. This occurs in particular | 
|  | for entries starting with /usr/lib. It will leave untouched entries such as /usr/../usr/lib. | 
|  |  | 
|  | <br>Instructions for Red Hat Enterprise Linux 3 users: | 
|  | <ol> | 
|  | <li>Mozilla is installed in <code>/usr/lib/mozilla-1.x</code> on this platform. Set the environment variable MOZILLA_FIVE_HOME to <code>/usr/../usr/lib/mozilla-1.x</code></li> | 
|  | <li>Start Eclipse. If you are not using Eclipse, add MOZILLA_FIVE_HOME to LD_LIBRARY_PATH before starting your standalone SWT application.</li> | 
|  | <li>The Browser widget should now work with the IBM VM.</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserapplets">Q: Can I view Java applets in the SWT Browser?</a></strong></dt> | 
|  | <dd>A: Browser support for applets varies by platform: | 
|  | <ul> | 
|  | <li>Windows: As of Eclipse/SWT 3.5, applets can be viewed in a Browser if <em>all</em> of the following conditions are met: | 
|  | <ol> | 
|  | <li>For Browsers created with style SWT.NONE, the installed IE version is 7.0 or newer</li> | 
|  | <li>For Browsers created with style SWT.MOZILLA, the installed XULRunner version is 1.9.2.x or 3.6.x</li> | 
|  | <li>The installed Java plug-in is Sun JRE 1.6u10 or newer, with the Next Generation Java Plug-in enabled (this plug-in is enabled by default when the JRE is installed)</li> | 
|  | <li>The application is launched with the same JRE that provides the installed Java plug-in</li> | 
|  | <li>The application adds the JRE's plugin.jar, deploy.jar and javaws.jar jars to the JRE's boot classpath.  For example, to launch eclipse: | 
|  | <code>eclipse -vmargs -Xbootclasspath/a:"C:\Program Files\Java\jre6\lib\plugin.jar;C:\Program Files\Java\jre6\lib\deploy.jar;C:\Program Files\Java\jre6\lib\javaws.jar"</code></li> | 
|  | </ol> | 
|  | </li> | 
|  | <li>Linux (Mozilla): Applets can be viewed with Mozilla-based Browsers as long as the Mozilla Java plug-in is found at runtime. | 
|  | For info about adding directories to the Mozilla plug-in search path see <a href="#mozillaPlugins">How can my Mozilla-based Browser find my Mozilla plug-ins?</a></li> | 
|  | <li>OS X (WebKit): Applets cannot be viewed with WebKit-based Browsers on OS X because the launching of a JRE to execute the applet collides with the | 
|  | JRE that is running the application.</li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserscrollbar">Q: How do I hide the Browser's scrollbars?</a></strong></dt> | 
|  | <dd>A: The only way to influence whether scrollbars are shown in a Browser or not is for the document it's showing to | 
|  | specify a style such as <code>'overflow:auto'</code> or <code>'overflow:hidden'</code>.  There are two ways to do this: | 
|  | <ol> | 
|  | <li>If you are providing the document being shown then its body tag can specify this style like | 
|  | <code><body style='overflow:hidden'></code>.</li> | 
|  | <li>Alternatively, this style can be changed in the DOM for any document that has been loaded.  The easiest way | 
|  | to do this is with a line like <code><em><yourBrowser></em>.execute("document.getElementsByTagName('body')[0].style.overflow='auto'");</code>.</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="browserproxy">Q: How do I set a proxy for the Browser to use?</a></strong></dt> | 
|  | <dd>A: | 
|  | <ul> | 
|  | <li>Windows: All Browser instances, regardless of native renderer, automatically use Windows' global proxy settings. | 
|  | These settings can be changed at any time in the Windows Control Panel. | 
|  | <li>OS X: All Browser instances, regardless of native renderer, automatically use OS X's global proxy settings. | 
|  | These settings can be changed at any time in the OS X System Preferences.</li> | 
|  | <li>Linux/Solaris: Proxy information must be explicitly specified by setting values for java properties | 
|  | <code>network.proxy_host</code> and <code>network.proxy_port</code> (<em>@since 3.4</em>).  These properties are checked | 
|  | the first time a Browser is created, and if set, will be used for all non-local HTTP, HTTPS and FTP requests in all Browser | 
|  | instances.  A user wishing to set these values should do so by passing <code>-D...</code> VM arguments to the JRE at startup.</li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="specifyxulrunner">Q: Can I specify which XULRunner installation gets used?</a></strong></dt> | 
|  | <dd>A: Typically a Mozilla-based Browser uses XULRunner's lookup mechanism to find a registered XULRunner at runtime, | 
|  | in which case a XULRunner location does not need to be specified.  However if you wish to override this mechanism you | 
|  | can set the value of java system property <code>org.eclipse.swt.browser.XULRunnerPath</code> to the full path of a | 
|  | specific XULRunner to use.  This property must be set before the <em>first</em> Browser instance is created. | 
|  | <p> | 
|  | The best opportunity for a user to set this property is by launching their application with a <code>-D</code> | 
|  | VM switch (eg.- add to the end of the eclipse.ini file: <code>-Dorg.eclipse.swt.browser.XULRunnerPath=...</code>). | 
|  | <p> | 
|  | An alternate approach that an eclipse application may use is to provide a <code>XULRunnerInitializer</code> | 
|  | implementation that sets this property.  This implementation will be invoked when the first Mozilla-based Browser | 
|  | is about to be created.  The steps to do this are: | 
|  | <ul> | 
|  | <li>Create a fragment with host plug-in <code>org.eclipse.swt</code>.</li> | 
|  | <li>In this fragment create class <code>org.eclipse.swt.browser.XULRunnerInitializer</code>.</li> | 
|  | <li>Implement a static initializer in this class that sets the <code>org.eclipse.swt.browser.XULRunnerPath</code> property. | 
|  | As an example, the class below will set the property to the win32 xulrunner plug-in if it is present. | 
|  | <pre> | 
|  | package org.eclipse.swt.browser; | 
|  |  | 
|  | import java.io.*; | 
|  | import java.net.*; | 
|  | import org.eclipse.core.runtime.*; | 
|  | import org.osgi.framework.Bundle; | 
|  |  | 
|  | public class XULRunnerInitializer { | 
|  | static { | 
|  | Bundle bundle = Platform.getBundle("org.mozilla.xulrunner.win32.win32.x86"); //$NON-NLS-1$ | 
|  | if (bundle != null) { | 
|  | URL resourceUrl = bundle.getResource("xulrunner"); //$NON-NLS-1$ | 
|  | if (resourceUrl != null) { | 
|  | try { | 
|  | URL fileUrl = FileLocator.toFileURL(resourceUrl); | 
|  | File file = new File(fileUrl.toURI()); | 
|  | System.setProperty("org.eclipse.swt.browser.XULRunnerPath",file.getAbsolutePath()); //$NON-NLS-1$ | 
|  | } catch (IOException e) { | 
|  | // log the exception | 
|  | } catch (URISyntaxException e) { | 
|  | // log the exception | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | </pre></li> | 
|  | </ul> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howdetectmozilla">Q: How does the Browser detect a native Mozilla browser to use?</a></strong></dt> | 
|  | <dd>A: The first Mozilla-based Browser instance performs the steps below, in order, until a native browser is found.  All subsequent Mozilla-based Browser instances will use this same detected browser. | 
|  | <ol> | 
|  | <li>If Java property <code>org.eclipse.swt.browser.XULRunnerPath</code> is defined then use it (see <a href="#specifyxulrunner">Can I specify which XULRunner installation is used?</a>). | 
|  | <li>Attempt to detect an OS-registered XULRunner with version 1.8.1.2 or newer (in order to enable JavaXPCOM use).  Note that only XULRunner installations that are compiled for the | 
|  | same architecture as the running SWT will be considered. | 
|  | <li>Attempt to detect an OS-registered XULRunner with a version earlier than 1.8.1.2 (again, the architecture must match that of SWT). | 
|  | <li><em>(if running on Linux or Solaris, and the Browser's style is <code>SWT.NONE</code>)</em> Attempt to use the native browser pointed at by OS environment variable <code>MOZILLA_FIVE_HOME</code>, which may be any of | 
|  | the browsers listed <a href="#browserlinux">here</a>.  Note that if this environment variable is not set when eclipse is run then on linux the eclipse launcher will try to set it by checking various | 
|  | potential installation locations. | 
|  | <li>At this point a native Mozilla browser could not be found, so an <code>SWTError</code> is thrown from the constructor, which should be caught and handled by the application.  Subsequent attempts to | 
|  | create Mozilla-based Browsers will go through these detection steps again. | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printmozillapath">Q: How can I determine which installed Mozilla browser is being used to render Browser content?</a></strong></dt> | 
|  | <dd>A: The first Mozilla-based Browser instance performs a series of <a href="#howdetectmozilla">steps</a> to detect a native browser to use.  The SWT snippet below can be used to print the location of the | 
|  | Mozilla browser that was found. | 
|  | <pre> | 
|  | import org.eclipse.swt.SWT; | 
|  | import org.eclipse.swt.browser.*; | 
|  | import org.eclipse.swt.graphics.*; | 
|  | import org.eclipse.swt.widgets.*; | 
|  |  | 
|  | public class DisplayMozillaVersion { | 
|  | public static void main(String[] args) { | 
|  | Device.DEBUG = true; | 
|  | Display display = new Display(); | 
|  | Shell shell = new Shell(display); | 
|  | System.out.println(">>>Snippet creating SWT.MOZILLA-style Browser"); | 
|  | try { | 
|  | new Browser(shell, SWT.MOZILLA); | 
|  | System.out.println(">>>succeeded"); | 
|  | } catch (Error e) { | 
|  | System.out.println(">>>This failed with the following error:"); | 
|  | e.printStackTrace(); | 
|  | System.out.println("\n\nSnippet creating SWT.NONE-style Browser"); | 
|  | try { | 
|  | new Browser(shell, SWT.NONE); | 
|  | System.out.println(">>>succeeded"); | 
|  | } catch (Error e2) { | 
|  | System.out.println(">>>This failed too, with the following error:"); | 
|  | e2.printStackTrace(); | 
|  | } | 
|  | } | 
|  | display.dispose(); | 
|  | } | 
|  | } | 
|  | </pre> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="mozillaplugins">Q: How can my Mozilla-based Browser find my Mozilla plug-ins?</a></strong></dt> | 
|  | <dd>A: As of eclipse 3.3 the default set of Mozilla plug-in paths that are searched can be augmented by defining | 
|  | environment variable <code>MOZ_PLUGIN_PATH</code>. For example: <code>export MOZ_PLUGIN_PATH=/usr/lib/browser-plugins</code>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="howusejavaxpcom">Q: How do I use JavaXPCOM with the Browser?</a></strong></dt> | 
|  | <dd>A: First, ensure that you have all of the requirements listed in | 
|  | <a href="http://www.eclipse.org/swt/faq.php#howusemozilla">How do I explicitly use Mozilla as the Browser's underlying renderer?</a>. | 
|  | Once these are in place then you can reference JavaXPCOM as follows: | 
|  | <p><ul> | 
|  | <li>If your application runs as an Eclipse plug-in: | 
|  | <ul> | 
|  | <li>download the <a href="http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/">XULRunner SDK</a> for the XULRunner version that you will be embedding</li> | 
|  | <li>add its lib/MozillaInterfaces.jar and (if present) lib/MozillaGlue.jar files to your plugin root | 
|  | <li>open your plug-in's META-INF/MANIFEST.MF file in the Plug-in Manifest editor</li> | 
|  | <ul> | 
|  | <li>switch to its "Runtime" tab</li> | 
|  | <li>add the jar(s) in the "Classpath" section</li> | 
|  | <li>add all of the org.mozilla.* packages in the "Exported Packages" section</li> | 
|  | <li>save these changes</li> | 
|  | </ul> | 
|  | </ul> | 
|  | <li>If your application runs as a stand-alone application: | 
|  | <ul> | 
|  | <li>download the <a href="http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/">XULRunner SDK</a> for the XULRunner version that you will be embedding</li> | 
|  | <li>add its lib/MozillaInterfaces.jar and (if present) lib/MozillaGlue.jar files to your application's java build path</li> | 
|  | </ul> | 
|  | </ul> | 
|  | <p>You can use <code>Browser.getWebBrowser()</code> to access the JavaXPCOM <code>nsIWebBrowser</code> that represents the Browser instance.  For an example of using JavaXPCOM see | 
|  | <a href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet267.java">Snippet 267</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="swtawtosx">Q: Why does the SWT_AWT bridge not work for me on OS X?</a></strong></dt> | 
|  | <dd>A: This was an SWT-AWT incompatibility that existed prior to Eclipse 3.2 and Java 5 on Mac OS X 10.4. | 
|  | This problem has since been fixed in SWT. On Mac OS X 10.4, you must install Java 1.5.0 Release 5 or later. | 
|  | On Mac OS X 10.5 and later, no additional updates are needed. (In the past a separate download called | 
|  | the "SWT Compatibility Library" was required. Starting with "Java for Mac OS X 10.4 Release 5", this library | 
|  | is now a part of the JRE. It is no longer available as a separate download from Apple.) | 
|  | For more information about this issue see | 
|  | <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67384">bug 67384</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="swtawtosxmore">Q: Why does the SWT_AWT bridge not work for me on OS X, even after updating Java or the OS?</a></strong></dt> | 
|  | <dd>A: Prior to Eclipse 3.6, both the Carbon and Cocoa versions of the SWT only supported embedding the SWT in an AWT Frame. | 
|  | In Cocoa SWT 3.6 and later, embedding works in either direction. If you have the right environment, next, | 
|  | make sure you are starting your application with the argument '-XstartOnFirstThread'. This is necessary even | 
|  | if you will be using Swing or the AWT. Next, make sure your code is calling each toolkit on the correct thread. Code | 
|  | that calls into the SWT	must be running on the main thread, and code that calls the AWT or Swing must be called from | 
|  | a thread other than the SWT thread, using either java.awt.EventQueue.invokeLater() or javax.swing.SwingUtilities.invokeLater(). | 
|  | <strong>NOTE:</strong> This is true on ALL PLATFORMS, not just Mac OS X, but your application is almost guaranteed to hang or | 
|  | be very unstable if you don't follow this rule on the Mac. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="swtawtsolaris">Q: Why does the SWT_AWT bridge not work for me on AIX or Solaris?</a></strong></dt> | 
|  | <dd>A: The SWT_AWT bridge requires that AWT be using XToolkit, since this implements the XEmbed | 
|  | protocol.  However by default AWT on AIX and Solaris use MToolkit.  This can be easily changed as | 
|  | described in <a href="http://java.sun.com/j2se/1.5.0/docs/guide/awt/1.5/xawt.html">XToolkit on Solaris/Linux</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printOnGTK">Q: Why is the Print menu item disabled in Eclipse on GTK (Linux, UNIX)?</a></strong></dt> | 
|  | <dd>A: GTK+ began supporting printing in version 2.10. To print in Eclipse, you need to have Eclipse version 3.3 or later, | 
|  | and at least GTK+ 2.10.0. To determine what GTK+ version you are running, type: <tt>rpm -q gtk2</tt>. | 
|  | <p>Prior to Eclipse 3.3, printing was not implemented on GTK; however you can use the External Tools support in Eclipse | 
|  | to print files using lpr or some other printing utility. See <a href="#printOnX">here</a> for the steps to set this up. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printOnGTKHangs">Q: Why does Eclipse 3.3 freeze when I open an editor on GTK 2.10 and GTK 2.12 (Linux, UNIX)?</a></strong></dt> | 
|  | <dd>A: There is a bug in some versions of GTK that causes certain print backends to hang. | 
|  | <p>If you do not want to upgrade your GTK to a fixed version, you can make use of the org.eclipse.swt.internal.gtk.disablePrinting | 
|  | flag available in Eclipse 3.3.1 maintenance builds as well as 3.4 M1 and later. To use this, you must pass the flag to eclipse on startup: | 
|  | <br>./eclipse -vmargs -Dorg.eclipse.swt.internal.gtk.disablePrinting | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="printOnMotif">Q: Why is the Print menu item disabled in Eclipse on Motif?</a></strong></dt> | 
|  | <dd>A: Printing on Motif requires that Xprint be installed on your machine.  A good FAQ regarding Xprint can be found at | 
|  | <a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="uithread">Q: Why do I get the error "org.eclipse.swt.SWTException: Invalid thread access"?</a></strong></dt> | 
|  | <dd>A: In SWT, by definition the thread that creates the Display is a UI-thread.  This thread is responsible for | 
|  | reading and dispatching events from the operating system event queue, and invoking listeners in response to these events. | 
|  | Listener code is executed in the UI-thread.  This makes an SWT application generally quite responsive, behaving like most | 
|  | other operating system programs.  However, any long operation, when executed by a listener, will run in the UI-thread | 
|  | and prevent it from reading and dispatching events, thus hanging the application. | 
|  |  | 
|  | <p>If a listener has a large amount of work to perform, instead of performing that work in the UI-thread, it can | 
|  | fork a separate thread so the UI-thread can continue dispatching events. If the other thread needs to execute code | 
|  | that accesses an SWT object, such as changing the string in a label, there is a concurrency issue.  At the very | 
|  | least, some kind of synchronization is necessary to prevent the operating system or SWT from crashing, hanging or | 
|  | behaving unpredictably.</p> | 
|  |  | 
|  | <p>SWT implements a single-threaded UI model often called apartment threading.  In this model, only the UI-thread | 
|  | can invoke UI operations.  SWT strictly enforces this rule.  If you try and access an SWT object from outside the | 
|  | UI-thread, you get the exception "org.eclipse.swt.SWTException: Invalid thread access".  Different operating systems | 
|  | have different rules governing threads, UI components and synchronization.  Some use a single-threaded UI model | 
|  | like SWT.  Others allow only one thread at a time in the window system library, controlling access through a | 
|  | global lock.  This type of multi-threaded UI model is often called free threading.  Currently, in order to be | 
|  | simple, efficient and portable, SWT is apartment threaded.</p> | 
|  |  | 
|  | <p>To allow background threads to perform operations on objects belonging to the UI-thread, the methods | 
|  | syncExec(Runnable runnable) and asyncExec(Runnable runnable) of Display are used.  These are the only | 
|  | methods in SWT that can be called from any thread.  They allow a runnable to be executed by the UI-thread, | 
|  | either synchronously, causing the background thread to wait for the runnable to finish, or asynchronously | 
|  | allowing the background thread to continue execution without waiting for the result.  A runnable that is | 
|  | executed using syncExec() most closely matches the equivalent direct call to the UI operation because a | 
|  | Java method call always waits for the result before proceeding, just like syncExec().</p> | 
|  |  | 
|  | <p>The following code sets the text of a label from a background thread and waits for the operation to complete: | 
|  |  | 
|  | <pre>display.syncExec( | 
|  | new Runnable() { | 
|  | public void run(){ | 
|  | label.setText(text); | 
|  | } | 
|  | }); | 
|  | </pre> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="noautolayout">Q: Why do I have to resize my shell to get my changed widgets to lay out again?</a></strong></dt> | 
|  | <dd>A: See <a href="#relayout">Why doesn't my layout update when I create/dispose/move/resize a control?</a> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="nographicslibrary">Q: Why do I get "SWTException: Unable to load graphics library" using GC?</a></strong></dt> | 
|  | <dd>A: Support for advanced graphics operations such as path for curvers and | 
|  | lines, alpha blending, antialiasing, patterns and transformations was | 
|  | added to SWT 3.1. On Windows, <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/gdiplus/gdiplus.asp">GDI+</a> | 
|  | is required. On X Windows platforms (i.e. GTK and Motif), | 
|  | <a href="http://cairographics.org/introduction">Cairo 0.4.0</a> is | 
|  | required. If your Windows platform does not have GDI+ by default then you can | 
|  | <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6a63ab9c-df12-4d41-933c-be590feaa05a&DisplayLang=en">download</a> | 
|  | a redistributable package from Microsoft. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="scrollonlinux"> Q: Why doesn't mouse scrolling work on Linux/Motif?</a></strong></dt> | 
|  | <dd>A: Mouse scrolling on Linux/Motif relies on the IMWheel driver.  Here is how it works: | 
|  | <ol> | 
|  | <li>The X Server gets the wheel event.</li> | 
|  | <li>Your /etc/X11/XF86Config must contain "ZAxisMap 4 5" (or the equivalent "Option" | 
|  | line if you use XFree86 4.x) in the Mouse section.  This maps the wheel to emulated | 
|  | mouse buttons "4" and "5".</li> | 
|  | <li>IMWheel has a global hook on the mouse, only looking for button4/5 events. | 
|  | When it sees one, it looks in /etc/X11/imwheel which is a table of what to do for | 
|  | which application.  E.g., GTK-based applications support the idea of 5-button mice | 
|  | natively, so the imwheel file says "do nothing (pass through) for gtk". | 
|  | On the other hand, no known Motif-based app seems to know about these, so imwheel | 
|  | eats the mouse event and emits an accelerator event for "PgUp" or whatever your | 
|  | preference is.  It has some clever pre-sets for xterm, netscape, and so on.</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="twmfocusfollowsmouse"> Q: Why can't I move my mouse into certain controls using TWM on Linux/Motif?</a></strong></dt> | 
|  | <dd>A: TWM by default is configured with focus-follows-mouse. It has been noticed that in this mode | 
|  | it is not possible to enter any secondary window brought up by a widget (such as a ToolTip or a drop down | 
|  | box on a Combo). | 
|  | <br>The two possible workarounds are: | 
|  | <ol> | 
|  | <li>Add NoTitleFocus to your $HOME/.twmrc file. By doing this you are instructing TWM not | 
|  | to set keyboard focus to each window as it is entered. <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=188135#c11">Bug 188135</a> | 
|  | has an example .twmrc file attachment.</li> | 
|  | <li>Switch to another window manager.</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="twmmodaldialogs"> Q: Why don't modal dialogs stay on top of other windows on Solaris 10 using CDE and DTWM?</a></strong></dt> | 
|  | <dd>A: The default setting of CDE is to allow modal dialogs to be hidden by other windows. To change this, you must: | 
|  | <ol> | 
|  | <li>Add the following line to your $HOME/.Xdefaults file: <tt>Dtwm*secondariesOnTop: True</tt></li> | 
|  | <li>Make sure that the "Allow primary windows on top" option is disabled in CDE. Under Style Manager>Windows, uncheck "Allow Primary windows on top" and click "Apply".</li> | 
|  | <li>Reload the .Xdefaults - <tt>xrdb $HOME/.Xdefaults</tt> - and restart the window manager. <tt>killall dtwm</tt> followed by <tt>/usr/dt/bin/dtwm &</tt></li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="32eclipsegtk64"> Q:  Why do I get strange drawing behaviour when running 32 bit Eclipse on a 64 bit GTK platform?</a></strong></dt> | 
|  | <dd>A: A 64 bit Linux OS comes configured by default with 64 bit libraries. If you wish to run the 32 bit version of Eclipse, you must ensure that you have | 
|  | a 32 bit JRE as well as the 32 bit version of the GTK libraries. Red Hat bundles the 32 bit libraries in their installer under the "Compatibility Arch Support" package. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="rtlgtk28"> Q:  Why doesn't SWT.RIGHT_TO_LEFT work on some GTK versions (less than 2.8)?</a></strong></dt> | 
|  | <dd>A: SWT relies on the Cairo graphics library to render strings and GTK started using Cairo in version 2.8. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="decorationHints"> Q:  Why doesn't my Shell have the trim decorations that I specified in its constructor?</a></strong></dt> | 
|  | <dd>A: The native window system is responsible for creating the decorations for all windows, and has the right to not fully honor the set of requested decorations. | 
|  | For this reason, styles that are passed to a Shell's constructor are considered to be hints.  For example, on some window managers, creating | 
|  | a shell with SWT.RESIZE, will also create a minimize and maximize button.  This is a constraint that all native applications are subject to. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="noevents"> Q:  Why doesn't a widget send events when I change it programmatically?</a></strong></dt> | 
|  | <dd>A: This is a design decision that is applied throughout SWT.  Events are usually not sent in response to programmatic changes (as opposed to user actions) | 
|  | in order to minimize notification of potentially unwanted events.  As a result, patterns like the following are <em>not</em> needed: | 
|  | <pre> | 
|  | ignoreNextSelectionEvent = true; | 
|  | myTable.select(2); | 
|  | ignoreNextSelectionEvent = false; | 
|  | </pre> | 
|  | Since a programmatic change implies that the application is already aware of the change being made, it can trigger the appropriate action directly.  If firing | 
|  | an event is still desired (for instance, to preserve object de-coupling) then the application can create the event and send it to the widget's listeners | 
|  | with <code>Widget.notifyListeners(int,Event)</code>. | 
|  | <p>Note that some specific programmatically-triggered events are sent, typically in response to low-level | 
|  | widget operations such as focus, move and resize changes. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="relayout"> Q:  Why doesn't my layout update when I create/dispose/move/resize a control?</a></strong></dt> | 
|  | <dd>A: A layout is only performed automatically on a Composite's children when the Composite | 
|  | is resized, including when it is initially shown.  To make a Composite lay out its | 
|  | children under any other circumstances, such as when children are created or disposed, | 
|  | its <em>layout()</em> method must be called.  For an example of this see SWT snippet | 
|  | <a href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet98.java">create and dispose children of a composite</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="scrolledcomposite"> Q:  How do I programmatically scroll a Composite?</a></strong></dt> | 
|  | <dd>A: This is done by using a ScrolledComposite instead of a Composite, and invoking | 
|  | <code>ScrolledComposite.setOrigin(...)</code> to scroll it.  For an example of this see SWT snippet | 
|  | <a href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet296.java">use a ScrolledComposite to scroll a Tree vertically</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="copypastewithKlipper"> Q:  Why does Copy/Paste sometimes not work on Linux?</a></strong></dt> | 
|  | <dd>A: There's a known Copy/Paste problem for people who run Klipper Clipboard applet which | 
|  | causes Eclipse clipboard operations to fail. For more information about this issue see | 
|  | <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153809">Bug 153809</a> | 
|  | <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=226540">Bug 226540</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="jumplist"> Q: Can I use the TaskItem's menu without the launcher?</a></strong></dt> | 
|  | <dd>A: The TaskItem's menu (also known as Jump List on Windows 7) was designed to be used  in conjunction with | 
|  | the eclipse launcher. That said, it is possible on Windows 7 to overwrite the default values for the items in the | 
|  | jump list calling <code>setData()</code> on the respective menu item using the following keys: | 
|  | <ol> | 
|  | <li><strong>org.eclipse.swt.win32.taskbar.executable:</strong> path to the executable</li> | 
|  | <li><strong>org.eclipse.swt.win32.taskbar.arguments:</strong> arguments to be passed to the executable</li> | 
|  | <li><strong>org.eclipse.swt.win32.taskbar.icon:</strong> path to the icon file</li> | 
|  | <li><strong>org.eclipse.swt.win32.taskbar.icon.index:</strong> the index of the icon, when the icon file is a dll or an exe</li> | 
|  | </ol> | 
|  | For more information about this issue see	<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306039">Bug 306039</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="multiplatformjar"> Q:  How do I produce a single jar file that contains all of the various SWT platform jars?</a></strong></dt> | 
|  | <dd>A: Please see <a href="http://stackoverflow.com/questions/2706222/create-cross-platform-java-swt-application/5784073#5784073">this post</a> for a complete overview | 
|  | of how to package the jars. | 
|  | </dd> | 
|  |  | 
|  |  | 
|  | <dt><strong><a name="twistieanimation"> Q:  How do I enable the fade animation for expando buttons in Trees (Windows Vista and up) ?</a></strong></dt> | 
|  | <dd>A: The fade in/fade out animation for expando buttons on Trees that can be seen in some applications, like Windows Explorer and older version | 
|  | of Eclipse, has been disabled. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342282">Bug 342282</a> for details. | 
|  | <br> | 
|  | The animation can be enabled by passing the -Dorg.eclipse.swt.internal.win32.enableFadeInOutExpandos argument to the JVM. For example:<p> | 
|  | <code>eclipse -vmargs -Dorg.eclipse.swt.internal.win32.enableFadeInOutExpandos</code></p> will bring the animation back to Eclipse. | 
|  | <p>Alternatively, the flag <code>-Dorg.eclipse.swt.internal.win32.enableFadeInOutExpandos</code> can be added to the end of eclipse's | 
|  | <code>eclipse.ini</code> for the same result.</p> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="keyboardshortcuts">Q: What are the standard keyboard shortcuts on Windows, Mac OS X, Linux?</a></strong></dt> | 
|  | <dd>A: Since SWT uses native controls, standard keyboard shortcuts can be used in SWT applications. | 
|  | Here is a useful <a href="http://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts">Table of Keyboard Shortcuts</a>. | 
|  | <br>Eclipse has additional keyboard shortcuts. For a list, type Ctrl + Shift + L. | 
|  | <br>On Mac OS X, the OS screen reader, VoiceOver, can also be used to navigate through controls using the keyboard. | 
|  | Here is the <a href="http://www.apple.com/accessibility/voiceover/manual.html">VoiceOver User's Manual</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="screenreaders"> Q:  Can I use a screen reader with Eclipse?</a></strong></dt> | 
|  | <dd>A: Yes. Eclipse works with JAWS and NVDA on Windows, VoiceOver on the Mac, and Orca on Linux. | 
|  | Window-Eyes and Hal/SuperNova on Windows have not been tested recently, however they both worked the last time they were tested. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="oldScreenReaderNotWorking"> Q:  Why doesn't my old Windows screen reader work with Eclipse 3.6?</a></strong></dt> | 
|  | <dd>A: JAWS version 8 and 9 and Window-Eyes version 6 no longer work well with Eclipse and other SWT applications. | 
|  | Window-Eyes 6 will cause Eclipse to crash, and JAWS 8 and 9 can cause SWT applications to crash. | 
|  | The reason is that Eclipse 3.6 added support for IAccessible2, and these older screen reader versions | 
|  | contain a partial implementation of IAccessible2 that does not follow the current IAccessible2 specification. | 
|  | The workaround is to launch eclipse or your SWT application using the | 
|  | <br><code>-Dorg.eclipse.swt.accessibility.UseIA2=false</code> | 
|  | <br>VM argument. For more information about this issue see | 
|  | <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313182">Bug 313182</a>. | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="tableheaderswithJAWS"> Q:  How do I get JAWS to read Table column headers?</a></strong></dt> | 
|  | <dd>A: JAWS does not read table column headers by default. | 
|  | To get JAWS to read table headers, you need to do the following steps with JAWS running: | 
|  | <ol> | 
|  | <li>Focus on the table</li> | 
|  | <li>Press Insert+F2  (this opens the "Run JAWS Manager" dialog)</li> | 
|  | <li>Select "Customize ListView" and OK   (this opens the "Customize ListView Headers" dialog)</li> | 
|  | <li>Select OK</li> | 
|  | </ol> | 
|  | </dd> | 
|  |  | 
|  | <dt><strong><a name="moreAccessibilityInfo"> Q:  Where can I get more info on Accessibility in Eclipse/SWT?</a></strong></dt> | 
|  | <dd>A: You can get more information on the Accessibility Features in Eclipse, and the Eclipse/SWT Accessibility API on the | 
|  | <a href="http://wiki.eclipse.org/Accessibility">Eclipse/SWT Accessibility wiki</a>. | 
|  | </dd> | 
|  |  | 
|  |  | 
|  | </dl> | 
|  | </table> | 
|  | </body> | 
|  | </html> |