home | projects | develop | info | Java Software |
Integration von Java-Jars in Gui-Shells (Windows, KDE?, ...) |
projects
shell & jar
minesweeper
jpg Optimizer
get Java |
Die IdeeSeit Java 2 fühlen sich Java-Applikationen in Jars ein wenig wie normale Applikationen an. Sie lassen sich z.B. im Windows Explorer einfach starten, ähnlich in anderen Betriebssystemen und deren Desktopumgebungen. Ziel des Projekts ist bessere Integration von Java-Applikationen in den Desktop, zum Beispiel die Darstellung in der Shell (Explorer, Konqueror, ...).
Icon
Type: Executable Jar File
Size: 33KB.
Tooltip jMineSweeper
a great variation of the game. © 2003 www.peterbuettner.de Nun kann man irgendeine unsinnige Beschreibung zum Jar verwenden. Falls die Shell es ermöglicht, sollten die neuen Informationen sinnvollerweise zusammen mit den alten dargestellt werden.
Drag'n Drop
Versionsinformationen Dies kann und sollte natürlich auch für andere Betriebssysteme/Desktopumgebungen implementiert werden. Wie geht's:
Man fügt dem Jar einfach Icons oder Textdateien in bestimmter Weise hinzu und sie werden angezeigt. Eine zweite Implementierung für WindowsDie Spezifikation habe ich für Windows zum grössten Teil implementiert, durch eine Reihe von Shell Erweiterungen. Diese Erweiterungen werden mit dem Dateityp 'jarfile' in der Registry verbunden, so werden Benutzerwünsche respektiert, z.B. *.jar mit einem Ziptool zu öffnen. Aktuell wird Unterstützt:
Beschränkungen:
Beim Datei-Drop wäre anzumerken, das maximal etwa 2000 Zeichen (Win2k) in die Kommandozeile passen.
2000 Zeichen sind bei langen Pfadnamen nur wenige Dateinamen (Bsp: 130 je => 15 Dateinamen).
Die Grenze erscheint auch bei allen anderen Programmen, ausser sie verwenden DDE.
Auch können z.Zt. keine Unicode Zeichen auf der Kommandozeile übertragen werden da
java/javaw die Kommandozeile nicht entsprechend interpretieren.
Umlaute und alle anderen Zeichen des Ansi Zeichensatzes sind möglich, keine
chinesischen, arabischen etc. Zeichen in Dateinamen. Man kann beim FileDrop die Namen wie in der Spezifikation über eine temporäre Datei übergeben, wodurch diese Beschränkungen von Länge und Zeichensatz aufgehoben werden. Dies ist erprobt bis rund 23.000 Dateinamen mit zusammen 1,6MB Länge. Lediglich der Explorer braucht recht lange (>20s, Athlon XP1700+) diese Liste zusammenzustellen. Es wird beobachtet, das manchmal ein falsches Icon dargestellt wird. Dieser Effekt tritt auch bei anderen solcher Shell Extensions auf, was darauf hinweist das es ein Windows-Problem ist. In 'normalen' Ordnern habe ich es nicht beobachtet, nur im Startmenü und selten auf dem Desktop. Hier hätte ich möglicherweise einen Lösungsansatz den ich in der nächsten Zeit überprüfen werde. Die 'Tooltips' sollten ab Win98/2000 bzw. (Win95/NT + IE4: shell32.dll Version 4.71) angezeigt werden. Jars mit Unicodenamen werden behandelt als wären keine Shell Metainformationen enthalten, dies wird in einer nächsten Version behoben sein. Technik: Realisierung mit Windows Shell Extension. Die Shell fragt die Extension für jedes Jar nach einem passenden Icon oder Tooltip. Geschrieben ist es in C/C++, die info-zip lib ist statisch dazugelinkt, so daß keine weiteren Dlls gebraucht werden. Download: Experimenteller code, keine Garantien, Version 0.2 Fertige dll 94KB gezippt.
Beispiele: Die Erweiterungen unterstüzende jars:
Warum gerade so?Vieles kann man auf unterschiedliche Art und Weise lösen. Ich wollte es einfach, aber funktionierend, wenig Kollision mit dem Sun/IBM/... Java Paket. Alles was bisher funktionierte sollte es auch mit den hier beschriebenen Erweiterungen tun. Ausserdem soll es leicht portierbar sein und für Entwickler leicht anwendbar, also nur ein Iconformat (keine png,xpm,gif,...). Einiges wurde in der Newsgroup de.comp.lang.java besprochen, für die guten Anregungen und Verbesserungen möchte ich mich hier bedanken. Es ist davon auszugehen das eine Shellerweiterung die Daten immer nur einzeln benötigt, also erst mal das Icon, einige Zeit später vielleicht einen Text. Die Ablage sollte also kleine Informationsstücke einfach und schnell zur Verfügung stellen, es wird nichts zwischengespeichert damit man nicht unnötig Speicher verbraucht. Die Daten werden alle unterhalb des Verzeichnisses '/shell-meta-inf/' im Jar abgelegt. Ich habe mich gegen das Verzeichniss /meta-inf/ entschieden da es 'Sun-Bereich' ist. Ebenso gegen die Verwendung von /meta-inf/manifest.mf, wo hier hinzukommt das das Manifest bei signierten Klassen recht groß werden kann, was dann alles geparst werden müsste. Die Daten sind zumeist zeilenorientierte Textdateien in der Form 'name=value'. Vom xml Format habe ich wegen des dann nötigen Xml-Parsers abgesehen. Weitere Bildformate ausser Windows-Icon: ich dachte mal es wäre eine gute Idee. Man lasse es eher bleiben, denn es kompliziert den zu portierenden Teil, führt zu mehr C/C++ Code. Es ist wohl besser bei der schreibenden Rolle (Icon-Generator) mehr Intelligenz zu investieren um die lesende Seite einfacher zu halten.
Eigentlich bieten Windows-Icons auch alles was man braucht, auch welche mit Alpha-channel sind möglich.
Es gibt genügend Icon-Editoren, deshalb sollte man dieses alteingesessene
Format einfach verwenden. Ein freier Icon Editor der auch solche mit
alphachannel erzeugen kann ist z.B. '@icon sushi'.
Er startet unter Linux/Wine, allerdings habe ich es unter Linux nicht ausführlich getestet. Wo geht's hinKleinen Installer verwenden. In andere Umgebungen portieren. Mit der Runtime ausliefern lassen. Andere ErweiterungenFür Windows gibt es noch einige Shell Extensions die man realisieren könnte, wobei mir allerdings wenig Verwendungszweck einfällt. Andere Plattformen bieten vielleicht noch andere Erweiterungen an. Drop handler: Das Drag'n Drop unter Windows leistet noch mehr, man kann auch beliebige Daten - Texte, Bilder oder was auch immer - direkt aus einer Anwendung auf eine Datei im Explorer fallen lassen. Zugegeben, das implementieren recht wenige Anwendungen für ihre Dateitypen. Hierfür könnte man im Jar konfigurieren welche Datentypen es annehmen kann . Es wäre vorstellbar einen Marker zu definieren, womit dann das Jar gestartet wird; ähnlich der anderen 'Start Options' wie in obengenannter Spezifikation beschrieben. Es würde eine temporäre Datei angegeben in welcher die Daten liegen. Properties handler: Da kann man per Dialog Dinge mit dem Jar anstellen lassen. Die obengenannten Versionsinformationen werden hiermit angezeigt. Es wäre eine Idee - optional für Entwickler - eine weiter Eigenschaftsseite mit Zugriff auf das Manifest sowie weiteren Informationen zum Jars anzuzeigen, leichtes starten des Jars mit einem Ziptool. Weitere Vorschläge?
Thumbnail Image Handler:
Hier zeigt Windows oder auch Kde eine größere Vorschau (~120x120) auf die Dateien. Man sehe sich
mal unter Windows einen Ordner an in dem einige html Dateien liegen und schalte
die Ansicht auf Miniaturansicht. Hier z.B. eine Vorschau auf die aktuelle Html-Seite.
Menu handler: Hier kann man aus dem Explorer/Shell-Kontextmenü Aktionen starten. Aber wofür? Anbieten das der Entwickler im Jar Menüpunkte konfiguriert, die dann den Start mit bestimmten Parametern anstösst? JRE Versions Auswahl: Ähnlich wie in Webstart könnte man vorgeben, welche Java Version benötigt wird. Dazu evtl. ein optionaler Download der Jre. Soweit ich mich erinnere, gibt es einen OpenSource Webstart clone von welchem man den code dazu leihen könnte. Allerdings muss man dann in den Start von Javaanwendungen eingreifen, diesen Schritt möchte ausklammern, er sollte den 'grossen' Organisationen Sun, IBM ... vorbehalten bleiben. Innerhalb einer Organisation, Firma, etc. ist solch eine Erweiterung durchaus denkbar. Evtl, könnte man eine eigene Dateierweiterung (z.B.: jexe) hernehmen und mit einem eigenen Starter versorgen. AlternativenEinige Möglichkeiten des gerade vorgestellten Ansatzes lassen sich auch mit anderen Methoden erreichen, mit unterschiedlichen Vor- und Nachteilen. Zwei mir bekannte möchte ich hier kurz ansprechen, weitere Vorschläge sind willkommen. Exe headerGemeint ist ein kleines Executable mit dahinterkopiertem Jar. Das Executable startet dann javaw mit diesem Verbund: javaw -jar ExeUndJar.exe. Hiermit hat man dann Icons und kann auch Dateien 'darauf fallenlassen'. Da gibt es im Netz schon Beispiele. Nachteil ist, das sich jeder Java-Entwickler evtl. etwas neues aneignen muß, dazu braucht man für jedes Betriebssystem eine eigene Version des Headers. Vorteil ist, das der Endbenutzer nichts installieren muß. WebstartDa gibt es ja bereits Webstart.
Webstart ist wohl eher auf zentrale Ablage von Programmen ausgerichtet, es erfolgt
eine meiner Meinung nach etwas unkontrollierte Aktualisierung der Programmdaten
auf den Clients. Vergleich: JarShell/Exeheader/WebstartDer Vergleich ist nur ein erster Ansatz. Was auf anderen Plattformen als Windows möglich ist kann ich nicht beurteilen. Bei 'modernen' Desktops wie Mac-OsX, KDE oder Gnome könnte ich mir ähnliche Möglichkeiten vorstellen
|
© 15. September 2003 Peter Büttner