{"id":15,"date":"2006-08-18T17:45:00","date_gmt":"2006-08-18T17:45:00","guid":{"rendered":"http:\/\/euve3303.vserver.de\/stefan\/blog\/?p=17"},"modified":"2011-12-01T20:41:06","modified_gmt":"2011-12-01T19:41:06","slug":"swt-applikation-als-applet","status":"publish","type":"post","link":"https:\/\/cogito-ergo-blog.de\/blog\/2006\/08\/18\/swt-applikation-als-applet\/","title":{"rendered":"SWT Applikation als Applet"},"content":{"rendered":"<p>[:de]Neulich stellte sich mir die Frage, warum eigentlich nicht auch SWT Applikationen als Applet laufen k\u00f6nnen. Gut der erste Grund ist sicherlich, dass SWT nicht immer installiert ist, im Gegensatz zu Swing, was schon mit dem JRE dabei ist. Allerdings ist das so dramatisch auch wieder nicht in Zeiten schneller DSL-Leitungen, dann wird&#8217;s eben nachgeladen.<\/p>\n<p>Was aber noch dazu kommt: SWT braucht native Libraries und native Libraries lassen sich nicht so einfach \u00fcber den ClassLoader nachladen, wie irgendwelche Java-Klassen.<\/p>\n<p>Ist das Applet allerdings signiert, dann ist auch das kein Problem und was dann mit relativ wenig Aufwand m\u00f6glich ist &#8230;<\/p>\n<p><!--more--><\/p>\n<p>Das Bespiel zeigt ein SWT Demo von IBM: den FileViewer. Die Klasse ist so gut wie nicht ge\u00e4ndert worden, lediglich die Initialisierung der Shell muss etwas anders aussehen.<\/p>\n<p>Dann habe ich noch einen kleinen Bootstrap-Loader f\u00fcr SWT geschrieben (bislang nur f\u00fcr Windows) und schon startet ein <a href=\"\/swtapplet\/demo.html\" target=\"_blank\">SWT Applet<\/a>.<\/p>\n<p><strong>Achtung<\/strong>: Das Applet ist zwar nur ein Demo, aber der FileViewer ist echt: z.B. Doppelklick auf ein Word-Dokument startet Word!!<\/p>\n<p>Bemerkung: das Applet ist signiert und erh\u00e4lt nach Best\u00e4tigung das Recht SWT zu installieren. Dazu werden zwei DLLs heruntergeladen und auf dem Java-Library-Path gespeichert. Sollte dies auf Grund unzureichender Rechte des angemeldeten Benutzers nicht funktionieren, so startet das Demo nicht korrekt und liefert stattdessen einen Fehler.<\/p>\n<p>Code:<\/p>\n<blockquote style=\"font-size: 85%; overflow: auto; font-family: courier new; height: 300px; background-color: #eeeeee; border: gray 1px solid;\"><p><tt class=\"java\"><span class=\"java4\">package <\/span><span class=\"java10\">com.rinke.solutions;<\/span><\/tt><\/p>\n<p><span class=\"java4\">import <\/span><span class=\"java10\">java.applet.Applet;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.awt.Canvas;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.awt.FlowLayout;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.File;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.FileOutputStream;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.IOException;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.InputStream;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.net.MalformedURLException;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.net.URL;<\/span><\/p>\n<p><span class=\"java4\">import <\/span><span class=\"java10\">javax.swing.JOptionPane;<\/span><\/p>\n<p><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.SWT;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.awt.SWT_AWT;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.examples.fileviewer.FileViewer;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.graphics.Point;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.layout.FillLayout;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.widgets.Display;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.widgets.Shell;<\/span><\/p>\n<p><span class=\"java4\">public class <\/span><span class=\"java10\">SWTApplet <\/span><span class=\"java4\">extends <\/span><span class=\"java10\">Applet <\/span><span class=\"java8\">{<\/span><\/p>\n<p><span class=\"java16\">@Override<br \/>\n<\/span><span class=\"java4\">public <\/span><span class=\"java9\">void <\/span><span class=\"java10\">init<\/span><span class=\"java8\">() {<\/p>\n<p><\/span><span class=\"java4\">super<\/span><span class=\"java10\">.init<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n<\/span><span class=\"java10\">Runtime.getRuntime<\/span><span class=\"java8\">()<\/span><span class=\"java10\">.loadLibrary<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#8220;swt-win32-3139.dll&#8221;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch<\/span><span class=\"java8\">( <\/span><span class=\"java10\">Throwable e<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java10\">System.out.println<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#8220;Load Library failed&#8221; <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nString path = System.getProperty<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#8220;java.library.path&#8221;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nString<\/span><span class=\"java8\">[] <\/span><span class=\"java10\">paths = path.split<\/span><span class=\"java8\">(<\/span><span class=\"java10\">File.pathSeparator<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nString targetDir = <\/span><span class=\"java4\">null<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">for <\/span><span class=\"java8\">(<\/span><span class=\"java9\">int <\/span><span class=\"java10\">i = <\/span><span class=\"java7\">0<\/span><span class=\"java10\">; i &lt; paths.length; i++<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java10\">String t = paths<\/span><span class=\"java8\">[<\/span><span class=\"java10\">i<\/span><span class=\"java8\">]<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">testWriteable<\/span><span class=\"java8\">(<\/span><span class=\"java10\">t<\/span><span class=\"java8\">) ) {<br \/>\n<\/span><span class=\"java10\">targetDir = t;<br \/>\n<\/span><span class=\"java4\">break<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">}<br \/>\n}<br \/>\n<\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">targetDir != <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java10\">download<\/span><span class=\"java8\">( <\/span><span class=\"java5\">&#8220;swt-win32-3139.dll&#8221;<\/span><span class=\"java10\">, targetDir <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\ndownload<\/span><span class=\"java8\">( <\/span><span class=\"java5\">&#8220;swt-awt-win32-3139.dll&#8221;<\/span><span class=\"java10\">, targetDir <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">} <\/span><span class=\"java4\">else <\/span><span class=\"java8\">{<br \/>\n<\/span><span class=\"java10\">JOptionPane.showMessageDialog<\/span><span class=\"java8\">(<\/span><span class=\"java10\">this,<\/span><span class=\"java5\">&#8220;Could not download swt dlls, java.library.path not writeable&#8221;<\/span><span class=\"java10\">,<br \/>\n<\/span><span class=\"java5\">&#8220;Error Downloading DLLs&#8221;<\/span><span class=\"java10\">, JOptionPane.ERROR_MESSAGE<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">}<br \/>\n}<\/p>\n<p><\/span><span class=\"java10\">resize<\/span><span class=\"java8\">(<\/span><span class=\"java7\">640<\/span><span class=\"java10\">, <\/span><span class=\"java7\">400<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">final <\/span><span class=\"java10\">Canvas c = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Canvas<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\nsetLayout<\/span><span class=\"java8\">(<\/span><span class=\"java4\">new <\/span><span class=\"java10\">FlowLayout<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<br \/>\nc.setSize<\/span><span class=\"java8\">(<\/span><span class=\"java7\">640<\/span><span class=\"java10\">, <\/span><span class=\"java7\">400<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nadd<\/span><span class=\"java8\">(<\/span><span class=\"java10\">c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p><\/span><span class=\"java4\">new <\/span><span class=\"java10\">Thread<\/span><span class=\"java8\">( <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Runnable<\/span><span class=\"java8\">() {<\/span><\/p>\n<p><span class=\"java4\">public <\/span><span class=\"java9\">void <\/span><span class=\"java10\">run<\/span><span class=\"java8\">() {<br \/>\n<\/span><span class=\"java10\">createSWT<\/span><span class=\"java8\">(<\/span><span class=\"java10\">c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">}<\/p>\n<p>})<\/span><span class=\"java10\">.start<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/span><br \/>\n<span class=\"java8\">}<\/p>\n<p><\/span><span class=\"java4\">private <\/span><span class=\"java9\">boolean <\/span><span class=\"java10\">testWriteable<\/span><span class=\"java8\">(<\/span><span class=\"java10\">String dir<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n<\/span><span class=\"java10\">FileOutputStream fos = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">FileOutputStream<\/span><span class=\"java8\">( <\/span><span class=\"java10\">dir + File.pathSeparator + <\/span><span class=\"java5\">&#8220;test&#8221; <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nfos.write<\/span><span class=\"java8\">(<\/span><span class=\"java7\">1<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nfos.close<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\nFile f = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">File<\/span><span class=\"java8\">( <\/span><span class=\"java10\">dir + File.pathSeparator + <\/span><span class=\"java5\">&#8220;test&#8221; <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nf.delete<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">return true<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch<\/span><span class=\"java8\">( <\/span><span class=\"java10\">Exception e<\/span><span class=\"java8\">){<\/p>\n<p>}<br \/>\n<\/span><span class=\"java4\">return false<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">}<\/span><\/p>\n<p><span class=\"java4\">private <\/span><span class=\"java9\">void <\/span><span class=\"java10\">download<\/span><span class=\"java8\">(<\/span><span class=\"java10\">String filename, String targetDir<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n<\/span><span class=\"java10\">URL url = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">URL<\/span><span class=\"java8\">( <\/span><span class=\"java10\">getCodeBase<\/span><span class=\"java8\">() <\/span><span class=\"java10\">+ filename <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nInputStream is = url.openStream<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\nFile of = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">File<\/span><span class=\"java8\">(<\/span><span class=\"java10\">targetDir + <\/span><span class=\"java5\">&#8220;\/&#8221; <\/span><span class=\"java10\">+ filename<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nFileOutputStream o = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">FileOutputStream<\/span><span class=\"java8\">( <\/span><span class=\"java10\">of <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nSystem.out.println<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#8220;downloading from &#8221; <\/span><span class=\"java10\">+ url + <\/span><span class=\"java5\">&#8220;to &#8221; <\/span><span class=\"java10\">+ of.getAbsolutePath<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java9\">byte<\/span><span class=\"java8\">[] <\/span><span class=\"java10\">buffer = <\/span><span class=\"java4\">new <\/span><span class=\"java9\">byte<\/span><span class=\"java8\">[<\/span><span class=\"java7\">10000<\/span><span class=\"java8\">]<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">while<\/span><span class=\"java8\">( <\/span><span class=\"java4\">true <\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java9\">int <\/span><span class=\"java10\">c = is.read<\/span><span class=\"java8\">(<\/span><span class=\"java10\">buffer<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">c == &#8211;<\/span><span class=\"java7\">1 <\/span><span class=\"java8\">) <\/span><span class=\"java4\">break<\/span><span class=\"java10\">;<br \/>\no.write<\/span><span class=\"java8\">(<\/span><span class=\"java10\">buffer,<\/span><span class=\"java7\">0<\/span><span class=\"java10\">,c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">}<br \/>\n<\/span><span class=\"java10\">o.close<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\nis.close<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">MalformedURLException e<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java3\">\/\/ TODO Auto-generated catch block<br \/>\n<\/span><span class=\"java10\">e.printStackTrace<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">IOException e<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java3\">\/\/ TODO Auto-generated catch block<br \/>\n<\/span><span class=\"java10\">e.printStackTrace<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n<\/span><span class=\"java8\">}<\/p>\n<p>}<\/span><\/p>\n<p><span class=\"java10\">Shell shell;<\/span><\/p>\n<p>Display display;<\/p>\n<p><span class=\"java4\">protected <\/span><span class=\"java9\">void <\/span><span class=\"java10\">createSWT<\/span><span class=\"java8\">(<\/span><span class=\"java10\">Canvas c<\/span><span class=\"java8\">) {<br \/>\n<\/span><span class=\"java10\">display = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Display<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\nshell = SWT_AWT.new_Shell<\/span><span class=\"java8\">(<\/span><span class=\"java10\">display, c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/span><\/p>\n<p>shell.setLayout<span class=\"java8\">(<\/span><span class=\"java4\">new <\/span><span class=\"java10\">FillLayout<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<\/span><\/p>\n<p>FileViewer app = <span class=\"java4\">new <\/span><span class=\"java10\">FileViewer<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/p>\n<p>app.open<\/span><span class=\"java8\">(<\/span><span class=\"java10\">display,shell<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p><\/span><span class=\"java3\">\/\/ Size AWT Panel so that it is big enough to hold the SWT widgets<br \/>\n<\/span><span class=\"java10\">Point size = shell.computeSize <\/span><span class=\"java8\">(<\/span><span class=\"java10\">SWT.DEFAULT, SWT.DEFAULT<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\nc.setSize<\/span><span class=\"java8\">(<\/span><span class=\"java10\">size.x + <\/span><span class=\"java7\">2<\/span><span class=\"java10\">, size.y + <\/span><span class=\"java7\">200<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p>validate<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/span><\/p>\n<p><span class=\"java3\">\/\/ shell.open();<br \/>\n<\/span><span class=\"java4\">while <\/span><span class=\"java8\">(<\/span><span class=\"java10\">!shell.isDisposed<\/span><span class=\"java8\">())<br \/>\n<\/span><span class=\"java4\">if <\/span><span class=\"java8\">(<\/span><span class=\"java10\">!display.readAndDispatch<\/span><span class=\"java8\">())<br \/>\n<\/span><span class=\"java10\">display.sleep<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/span><br \/>\n<span class=\"java8\">}<\/span><\/p>\n<p>}<\/p><\/blockquote>\n<p>[:en]<\/p>\n<p>Recently I asked myself, why swt applications couldn&#8217;t run as applet actually? Okay one certain reason is swt is not part of the jre as swing is. However this should not be to dramatic in times of highspeed internet connections, we can download and install it on the fly.\n<\/p>\n<p>\nBut in addition: SWT needs native libraries and native libraries could not easily loaded by an url classloader like some simple java class files.\n<\/p>\n<p>\nBut if the applet is signet, then even this isn&#8217;t really a problem, and then with little effort you can see &#8230;\n<\/p>\n<p><!- more--><\/p>\n<p>\nThe example demonstrates a swt demo by IBM: the FileViewer. The class isn&#8217;t virtually changed, solely the initialiasation of the shell looks somewaht different.\n<\/p>\n<p>\nFurther on I added a simple boot loader for swt applets (until now its windows only) und yet a <a target=\"_blank\" href=\"\/swtapplet\/demo.html\">SWT Applet<\/a> starts.\n<\/p>\n<p>\n<strong>Warning<\/strong>: This applet indeed is just a demo, but the FileViewer is real: for instance a double click on a word document starts word!!\n<\/p>\n<p>\nNote: the applet is signet and gets the permission to install swt after confirmation. To achieve this the applet will dowload two DLLs and store them to the java library path. If this isn&#8217;t possible due insufficient rights of the user logged in, the demo wont start and you will get an error message.\n<\/p>\n<p>Code:<\/p>\n<blockquote style=\"border-right: 1px solid gray; border-width: 1px; border-style: solid; border-color: gray; font-size: 85%; overflow: auto; font-family: courier new; height: 300px; background-color: rgb(238, 238, 238);\"><p>\n<tt class=\"java\"><span class=\"java4\">package <\/span><span class=\"java10\">com.rinke.solutions;<\/p>\n<p><\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.applet.Applet;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.awt.Canvas;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.awt.FlowLayout;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.File;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.FileOutputStream;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.IOException;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.InputStream;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.net.MalformedURLException;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.net.URL;<\/p>\n<p><\/span><span class=\"java4\">import <\/span><span class=\"java10\">javax.swing.JOptionPane;<\/p>\n<p><\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.SWT;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.awt.SWT_AWT;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.examples.fileviewer.FileViewer;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.graphics.Point;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.layout.FillLayout;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.widgets.Display;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.eclipse.swt.widgets.Shell;<\/p>\n<p><\/span><span class=\"java4\">public class <\/span><span class=\"java10\">SWTApplet <\/span><span class=\"java4\">extends <\/span><span class=\"java10\">Applet <\/span><span class=\"java8\">{<\/p>\n<p>    <\/span><span class=\"java16\">@Override<br \/>\n    <\/span><span class=\"java4\">public <\/span><span class=\"java9\">void <\/span><span class=\"java10\">init<\/span><span class=\"java8\">() {<\/p>\n<p>        <\/span><span class=\"java4\">super<\/span><span class=\"java10\">.init<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n            <\/span><span class=\"java10\">Runtime.getRuntime<\/span><span class=\"java8\">()<\/span><span class=\"java10\">.loadLibrary<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&quot;swt-win32-3139.dll&quot;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch<\/span><span class=\"java8\">( <\/span><span class=\"java10\">Throwable e<\/span><span class=\"java8\">)  {<br \/>\n            <\/span><span class=\"java10\">System.out.println<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&quot;Load Library failed&quot; <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            String path = System.getProperty<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&quot;java.library.path&quot;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            String<\/span><span class=\"java8\">[] <\/span><span class=\"java10\">paths = path.split<\/span><span class=\"java8\">(<\/span><span class=\"java10\">File.pathSeparator<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            String targetDir = <\/span><span class=\"java4\">null<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java4\">for <\/span><span class=\"java8\">(<\/span><span class=\"java9\">int <\/span><span class=\"java10\">i = <\/span><span class=\"java7\">0<\/span><span class=\"java10\">; i &lt; paths.length; i++<\/span><span class=\"java8\">) {<br \/>\n                <\/span><span class=\"java10\">String t = paths<\/span><span class=\"java8\">[<\/span><span class=\"java10\">i<\/span><span class=\"java8\">]<\/span><span class=\"java10\">;<br \/>\n                <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">testWriteable<\/span><span class=\"java8\">(<\/span><span class=\"java10\">t<\/span><span class=\"java8\">) ) {<br \/>\n                    <\/span><span class=\"java10\">targetDir = t;<br \/>\n                    <\/span><span class=\"java4\">break<\/span><span class=\"java10\">;<br \/>\n                <\/span><span class=\"java8\">}<br \/>\n            }<br \/>\n            <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">targetDir != <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n                <\/span><span class=\"java10\">download<\/span><span class=\"java8\">( <\/span><span class=\"java5\">&quot;swt-win32-3139.dll&quot;<\/span><span class=\"java10\">, targetDir <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n                download<\/span><span class=\"java8\">( <\/span><span class=\"java5\">&quot;swt-awt-win32-3139.dll&quot;<\/span><span class=\"java10\">, targetDir <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java8\">} <\/span><span class=\"java4\">else <\/span><span class=\"java8\">{<br \/>\n                <\/span><span class=\"java10\">JOptionPane.showMessageDialog<\/span><span class=\"java8\">(<\/span><span class=\"java10\">this,<\/span><span class=\"java5\">&quot;Could not download swt dlls, java.library.path not writeable&quot;<\/span><span class=\"java10\">,<br \/>\n                        <\/span><span class=\"java5\">&quot;Error Downloading DLLs&quot;<\/span><span class=\"java10\">, JOptionPane.ERROR_MESSAGE<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java8\">}<br \/>\n        }<\/p>\n<p>        <\/span><span class=\"java10\">resize<\/span><span class=\"java8\">(<\/span><span class=\"java7\">640<\/span><span class=\"java10\">, <\/span><span class=\"java7\">400<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java4\">final <\/span><span class=\"java10\">Canvas c = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Canvas<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n        setLayout<\/span><span class=\"java8\">(<\/span><span class=\"java4\">new <\/span><span class=\"java10\">FlowLayout<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<br \/>\n        c.setSize<\/span><span class=\"java8\">(<\/span><span class=\"java7\">640<\/span><span class=\"java10\">, <\/span><span class=\"java7\">400<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n        add<\/span><span class=\"java8\">(<\/span><span class=\"java10\">c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p>        <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Thread<\/span><span class=\"java8\">( <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Runnable<\/span><span class=\"java8\">() {<\/p>\n<p>            <\/span><span class=\"java4\">public <\/span><span class=\"java9\">void <\/span><span class=\"java10\">run<\/span><span class=\"java8\">() {<br \/>\n                <\/span><span class=\"java10\">createSWT<\/span><span class=\"java8\">(<\/span><span class=\"java10\">c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;              <br \/>\n            <\/span><span class=\"java8\">}<\/p>\n<p>        })<\/span><span class=\"java10\">.start<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/p>\n<p>\n    <\/span><span class=\"java8\">}<\/p>\n<p>    <\/span><span class=\"java4\">private <\/span><span class=\"java9\">boolean <\/span><span class=\"java10\">testWriteable<\/span><span class=\"java8\">(<\/span><span class=\"java10\">String dir<\/span><span class=\"java8\">) {<br \/>\n        <\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n            <\/span><span class=\"java10\">FileOutputStream fos = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">FileOutputStream<\/span><span class=\"java8\">( <\/span><span class=\"java10\">dir + File.pathSeparator + <\/span><span class=\"java5\">&quot;test&quot; <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            fos.write<\/span><span class=\"java8\">(<\/span><span class=\"java7\">1<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            fos.close<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n            File f = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">File<\/span><span class=\"java8\">( <\/span><span class=\"java10\">dir + File.pathSeparator + <\/span><span class=\"java5\">&quot;test&quot; <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            f.delete<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java4\">return true<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch<\/span><span class=\"java8\">( <\/span><span class=\"java10\">Exception e<\/span><span class=\"java8\">){<\/p>\n<p>        }<br \/>\n        <\/span><span class=\"java4\">return false<\/span><span class=\"java10\">;<br \/>\n    <\/span><span class=\"java8\">}<\/p>\n<p>    <\/span><span class=\"java4\">private <\/span><span class=\"java9\">void <\/span><span class=\"java10\">download<\/span><span class=\"java8\">(<\/span><span class=\"java10\">String filename, String targetDir<\/span><span class=\"java8\">) {<br \/>\n        <\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n            <\/span><span class=\"java10\">URL url = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">URL<\/span><span class=\"java8\">( <\/span><span class=\"java10\">getCodeBase<\/span><span class=\"java8\">() <\/span><span class=\"java10\">+ filename <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            InputStream is = url.openStream<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n            File of = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">File<\/span><span class=\"java8\">(<\/span><span class=\"java10\">targetDir + <\/span><span class=\"java5\">&quot;\/&quot; <\/span><span class=\"java10\">+ filename<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            FileOutputStream o = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">FileOutputStream<\/span><span class=\"java8\">( <\/span><span class=\"java10\">of <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            System.out.println<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&quot;downloading from &quot; <\/span><span class=\"java10\">+ url + <\/span><span class=\"java5\">&quot;to &quot; <\/span><span class=\"java10\">+ of.getAbsolutePath<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java9\">byte<\/span><span class=\"java8\">[] <\/span><span class=\"java10\">buffer = <\/span><span class=\"java4\">new <\/span><span class=\"java9\">byte<\/span><span class=\"java8\">[<\/span><span class=\"java7\">10000<\/span><span class=\"java8\">]<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java4\">while<\/span><span class=\"java8\">( <\/span><span class=\"java4\">true <\/span><span class=\"java8\">) {<br \/>\n                <\/span><span class=\"java9\">int <\/span><span class=\"java10\">c = is.read<\/span><span class=\"java8\">(<\/span><span class=\"java10\">buffer<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n                <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">c == -<\/span><span class=\"java7\">1 <\/span><span class=\"java8\">) <\/span><span class=\"java4\">break<\/span><span class=\"java10\">;<br \/>\n                o.write<\/span><span class=\"java8\">(<\/span><span class=\"java10\">buffer,<\/span><span class=\"java7\">0<\/span><span class=\"java10\">,c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n            <\/span><span class=\"java8\">}<br \/>\n            <\/span><span class=\"java10\">o.close<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n            is.close<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">MalformedURLException e<\/span><span class=\"java8\">) {<br \/>\n            <\/span><span class=\"java3\">\/\/ TODO Auto-generated catch block<br \/>\n            <\/span><span class=\"java10\">e.printStackTrace<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">IOException e<\/span><span class=\"java8\">) {<br \/>\n            <\/span><span class=\"java3\">\/\/ TODO Auto-generated catch block<br \/>\n            <\/span><span class=\"java10\">e.printStackTrace<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n        <\/span><span class=\"java8\">}<\/p>\n<p>    }<\/p>\n<p>    <\/span><span class=\"java10\">Shell shell;<\/p>\n<p>    Display display;<\/p>\n<p>    <\/span><span class=\"java4\">protected <\/span><span class=\"java9\">void <\/span><span class=\"java10\">createSWT<\/span><span class=\"java8\">(<\/span><span class=\"java10\">Canvas c<\/span><span class=\"java8\">) {<br \/>\n        <\/span><span class=\"java10\">display = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">Display<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n        shell = SWT_AWT.new_Shell<\/span><span class=\"java8\">(<\/span><span class=\"java10\">display, c<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p>        shell.setLayout<\/span><span class=\"java8\">(<\/span><span class=\"java4\">new <\/span><span class=\"java10\">FillLayout<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<\/p>\n<p>        FileViewer app = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">FileViewer<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/p>\n<p>        app.open<\/span><span class=\"java8\">(<\/span><span class=\"java10\">display,shell<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p><\/span><span class=\"java3\">\/\/      Size AWT Panel so that it is big enough to hold the SWT widgets<br \/>\n        <\/span><span class=\"java10\">Point size = shell.computeSize <\/span><span class=\"java8\">(<\/span><span class=\"java10\">SWT.DEFAULT, SWT.DEFAULT<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n        c.setSize<\/span><span class=\"java8\">(<\/span><span class=\"java10\">size.x + <\/span><span class=\"java7\">2<\/span><span class=\"java10\">, size.y + <\/span><span class=\"java7\">200<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<\/p>\n<p>        validate<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/p>\n<p>\n        <\/span><span class=\"java3\">\/\/ shell.open();<br \/>\n         <\/span><span class=\"java4\">while <\/span><span class=\"java8\">(<\/span><span class=\"java10\">!shell.isDisposed<\/span><span class=\"java8\">())<br \/>\n            <\/span><span class=\"java4\">if <\/span><span class=\"java8\">(<\/span><span class=\"java10\">!display.readAndDispatch<\/span><span class=\"java8\">())<br \/>\n                <\/span><span class=\"java10\">display.sleep<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/p>\n<p>\n    <\/span><span class=\"java8\">}<\/p>\n<p>}<\/span><\/tt><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>[:de]Neulich stellte sich mir die Frage, warum eigentlich nicht auch SWT Applikationen als Applet laufen k\u00f6nnen. Gut der erste Grund ist sicherlich, dass SWT nicht immer installiert ist, im Gegensatz zu Swing, was schon mit dem JRE dabei ist. Allerdings &hellip; <a href=\"https:\/\/cogito-ergo-blog.de\/blog\/2006\/08\/18\/swt-applikation-als-applet\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/15"}],"collection":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=15"}],"version-history":[{"count":2,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/15\/revisions"}],"predecessor-version":[{"id":55,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/15\/revisions\/55"}],"wp:attachment":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=15"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=15"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}