Desktop-Launch unter verschiedenen OS

S

SE

Da ich mich zur Zeit etwas mit multiplatforming auseinander setze wollte ich hier mal die gelegenheit nutzen um 1) meine aktuellen Erfahrungen für die jenigen anzubieten die diese noch nicht haben und 2) um selbst noch ein paar Fragen loszuwerden.

Zum Thema allgemein
Jeder kennt das : wenn man etwas installiert , ganz gleich ob Spiel , Anwendung oder was auch immer , bekommt man von den meisten Installern die Möglichkeit eine Desktopverknüpfung anzulegen. Das kennt man so von Java nicht : entweder wird ein Launcher als Jar dierekt auf den Desktop gepackt , ein Batch- bzw Shell-Skript welches dann java mit den entsprechenden Parametern startet oder unter Windows auch gerne einen EXE-Wraper.

Geht es auch anderst ?
Ja. Es gibt möglichkeiten auch mit Java "native" Desktopverknüpfungen anzulegen.
Das funktioniert jedoch bei den unterschiedlichen Betriebssystemen jewils anderst.

Welche Möglichkeiten gibt es ?
Windows : eine der einfachsten Möglichkeiten unter Windows ist es dierekt die Windows eigenen Mittel zu verweden. Viele werden jetzt sagen : "Naja dürfte mit JNA nicht schwer werden." Das stimmt auch so weit ... aber es geht auch noch einen Tick einfacher mit JNI. Das zauberwort heißt JShortCut
JShortCut bietet uns eine Windows-DLL mithilfe der wir ganz einfach Verknüpfungen erstellen können. Auch haben wir über eine statische Methode die Möglichkeit spezielle Ordner zu suchen wie etwas den Desktop , den "Programme"-Ordner oder auch das Startmenü. Und da das ganze dierekt durch Informationen von Windows selbst gefüttert wird sollte das auf allen NT-basierten Versionen *2000 , XP , 2003 , 2005 , Vista , 2008 , 7* funktionieren. *Ich selbst habe es auf 2k , 2k3 , XP Pro , XP Pro MCE 05 , Vista und 7 probiert*
Das ganze Paket besteht aus nur einer Klasse und einer DLL-Datei. Da auf der Hompage auch eine API-Doc zu finden ist wird das arbeiten damit sehr einfach.

Beispiel für Windows
Sagen wir mal wir möchten eine Verknüpfung auf dem Desktop erstellen welche eine in ein Jar gepackte Java-Applikation OHNE Consolen-Fenster startet. Was wir dafür brauchen ist recht wenig :
-den Pfad von Java
-den Pfad des Desktops
-den Pfad zum Jar *wir gehen hier in diesem Beispiel davon aus das das Jar unter user.home\appfolder\file.jar liegt*
Wenn wir das nacheinander abarbeiten sieht das ungefähr so aus

Java
Java:
String javaPath=(new StringBuilder()).append(System.getProperty("java.home")).append(System.getProperty("file.separator")).append("bin").append(System.getProperty("file.separator")).append("javaw.exe").toString();
Ganz wichtig hier das wir von java.home noch in das Unterverzeichnis BIN gehen.

Desktop
Java:
String desktopPath=JShellLink.getDirectory("desktop");

Jar
Java:
String jarPath=(new StringBuilder()).append(System.getProperty("user.home")).append(System.getProperty("file.separator")).append("ApplikationsOrder").append(System.getProperty("file.separator")).append("JarFile.jar").toString();

Wie können unserer Verknüpfung natürlich auch noch ein Icon mitgeben. Dafür braucht ihr unter Windows eine ICO-Datei. Am besten geeignet um aus einem vorhanden bild ein ICO zu machen ist GIMP. Einfach das Bild laden und dann mit Speichern Unter als ICO-File wieder speichern. Wichtig dabei ist das als Modus 32bpp 8Bit Alpha verwendet wird. Wenn wir eine ICO-Datei haben können wir als Index 0 verwenden.

Daraus können wir nun eine Desktopverknüpfung erstellen.
Dazu müssen wir erst ein neues Objekt der Klasse JShellLink erstellen und auf dieses dann verschiedene Methoden anwenden.
Java:
JShellLink link=new JShellLink(); //neues JShellLink-Objekt erzeugen
link.setFolder(desktopPath); //Ort der Verknüpfung angeben
link.setName("App"); //Name der Verknüpfung angeben
link.setPath(javaPath); //Ziel der Verknüpfung
link.setArguments("-jar "+jarPath); //Argumente
link.setIconLocation("icon.ico"); //Icon
link.setIconIndex(0); //Icon-Index 0 *1tes Icon* falls mehrere vorhanden sind
link.save(); //Verknüpfung speichern

Nun sollten wir auf dem Desktop eine neue Verknüpfung haben die den gewählten Namen hat , auf javaw.exe zeigt , mit den nötigen Argumenten ausgestattet ist und das gewählte Icon hat.


Und wie funktioniert das ganze jetzt unter Linux ?

Nun ... unter Linux ist es sogar noch etwas einfacher als unter Windows.
In den meisten Linux-Distributionen werden Desktop-Verknüpfungen durch sog. .desktop-Files repräsentiert *änlich den LNK-Files unter Windows*. Da aber diese .desktop-Files im gegensatzt zu den den .lnk-Files unter Windows nur als text/plain bestehen ist es sehr einfach eine Verknüpfung zu erstellen.
Zunächst brauchen wir auch hier wieder die drei Pfade :
Java:
String javaPath=(new StringBuilder()).append(System.getProperty("java.home")).append(System.getProperty("file.separator")).append("bin").append(System.getProperty("file.separator")).append("java").toString();
Auffallend hier : es gibt unter Linux kein javaw-Binary. Warum ? Nun , unter Linux wird ein Terminal nur angezeigt wenn man dieses auch anfordert. Wenn man jetzt also zum Beispiel aus einer anderen Java-Applikation eine neue starten will reicht es lediglich das java-Binary zu verwenden. Ein Terminal wird tortzdem nicht mitgestartet. *Was man jetzt machen muss um bei einem solchen aufruf ein Terminal zu erzwingen weis ich leider nicht.*
Java:
String desktopPath=(new StringBuilder()).append(System.getProperty("user.home")).append(System.getProperty("file.separator")).append("Desktop").toString();
Achtung : es gibt auch einige Linux-Distributionen wo "Desktop" auch übersetz wurde *z.B. unter Fedora 15 heißt es ~/Arbeitsfläche*. Mich persönlich ärgert dieses Vorgehen des Distributoren da man so für jede Sprache ein locale bräuchte. Man sollte wenigstens die Kompatibilität erhalten und entweder ~/Desktop weiterverdenen oder zumindest ~/Desktop als soft-Link erstellen.

Für das App.jar gehen wir diesmal auch wieder von user.home/myapp/app.jar aus
Java:
String jarPath=(new StringBuilder()).append(System.getProperty("user.home")).append(System.getProperty("file.separator")).append("myapp").append(System.getProperty("file.separator")).append("app.jar").toString();

Nach dem wir nun diese drei Informationen haben können wir uns an das zusammenbauen der desktop-Datei machen.

Auch hier können wir wieder ein Icon mit auf den Weg geben , allerdings untersützen die meisten Linux-Distributionen hier duetlich mehr Dateiformate als Windows. Also können wir beruhigt ein PNG nehmen.

Java:
File file=new File(desktopPath+System.getProperty("file.separator")+"myapp.desktop"); //hier muss man darauf achten einen möglichst eindeutigen Namen zu wählen
//auch wäre eine Prüfung ob gewähltes File schon vorhanden ist sinnvoll
PrintStream out=new PrintStream(new FileOutputStream(file)); //einen PrintStream erzeugen um gequem über println(String) zeilenweise in das .desktop-File zu schreiben
out.println("[Desktop Entry]"); //für alle Distributionen : gibt an das jetzt der Block für eine Desktopverknüpfung beginnt
out.println("Name=MyAPP"); //Name der später angezeigt werden soll
out.println("Icon="+System.getProperty("user.home")+System.getProperty("file.separator")+"myapp"+System.getProperty("file.separator")+"icon.png"); //Icon mit absoluter Pfadangabe *kann vorher als Variable erzeugt werden*
out.println("Type=Application"); //Angabe das verlinktes File eine Applikation ist
out.println("Exec="+javaPath+" -jar "+jarPath); //Commando welches auszuführen ist , hier : java-Binary mit Parameter -jar und Angabe des auszuführenden Jar-Files
out.println("Terminal=false"); //Terminal-Fenster unterdrücken
out.println("StartupNotify=true"); //weis ich nicht wozu das gut ist , wird aber beim anlegen von verknüpfungen irgendwie immer auf true gesetz ... also füge ich es auch einfach so mit ein
out.close(); //PrintStream schließen
file.setExecutable(true); //Verknüpfung auf Ausführbar setzen

Nun sollten wir auch auf Linux eine Verknüpfung haben welche den gewählten Namen hat , das gewählte Jar ausführt und das gewünschte Icon hat.
getestet unter : OpenSuSE 11.4 KDE / Gnome
wäre für weiteres Testen dankbar


So .. und nun noch für Mac ?

Tja ... da muss ich jetzt leider passen da ich keinen Mac besitze und nur dafür auch nicht zum Raubkopierer werden will. Zu mal ich nicht mal weis ob es Mac auch für i386 CPUs gibt ... ich kenne nur PowerPC-distributionen.
Ich wäre also dankbar wenn sich jemand die Mühe machen würde und hier den Code für Mac einfügen würde. Nach möglichkeit auch bitte ausgiebig testen.
Was ich außedem bräuchte : wie ruft man unter Mac das java-Binary auf ? Wie unterdrückt man das ein Terminal geöffnet wird wenn man aus anderen Applikationen einen Aufruf startet ? *siehe Unterschied win : java.exe vs javaw.exe*

Ich hoffe ich kann hiermit einigen helfen und das mir auch ein wenig geholfen wird was Mac angeht.

SPiKEe
 
Zuletzt bearbeitet von einem Moderator:
Zu Linux:
Da der Desktop bei Gnome3 quasi abgeschaft wird (standardmäßig deaktiviert, Desktop gilt bei den Entwicklern von Gnome3 als veraltet und umständlich), und bei KDE auch nur eine untergeordnete Rolle spielt, ist es auf Linux-Systemen prinzipiell nicht ratsam, dem Nutzer eine Desktopverknüpfung zu erstellen. Linux-Puristen würden sagen: Ein Anwendungsstarter hat auf dem Desktop (Desktop als Ordner, nicht in der Anzeige) nichts verloren, da kommen nur Daten hin. Ein weiterer Grund ist die Auffindbarkeit mit Schnellstartprogrammen und im "Startmenü".

Wenn ich einen Installer schreiben müsste, würde ich für Linux so vorgehen:
Die Freedesktop.org-Spezifikation besagt, dass die Anwendungsstarter (.desktop-Dateien) in folgende Ordner installiert werden sollen, damit sie über das Menü und die Schnellstartprogramme gefunden werden können:
~/.local/share/applications/ für lokale Installation (einzelner Nutzer, relativer Pfad; die Tilde steht für das Nutzer-Verzeichnis, also z.B. /home/genodeftest/ )
/usr/share/applications für systemweite Installation, erfordert üblicherweise höhere/Administratorrechte, die bei der systemweiten Installation von Programmen sowieso gegeben sein müssen
Eine Kurzfassung dazu steht auf der Seite der Gnome-Entwickler, http://developer.gnome.org/integration-guide/stable/desktop-files.html.en
Die Langfassung ist die Spezifikation selbst, siehe http://standards.freedesktop.org/menu-spec/menu-spec-latest.html#introduction
Den Inhalt würde ich auch so schreiben, wie du es gemacht hast.

Zu deinem Vorschlag:
Statt
Java:
System.getProperty("file.separator")
eignet sich auch
Java:
File.separator
das ist kürzer (übersichtlicher).

Zu Mac: Es ist doch irrelevant, ob es Mac für i386 gibt (ja, gibt es!, siehe https://secure.wikimedia.org/wikipedia/en/wiki/Apple–Intel_transition )
Ich besitze auch keinen Mac zum ausprobieren, aber auch dort würde ich den Programmstarter nicht auf den Desktop legen, sondern ins Menü, nur auf Wunsch des Nutzers ins Dock (diese Schnellstartleiste/Taskleiste bei Mac, standardmäßig am unteren Desktop-Rand)
Wie man die Installation mit Eintrag ins Programmenü durchführt, sagt uns Apple selber: http://developer.apple.com/java/faq/

Wobei ich den Desktop-Shortcut (Windows) und die Verknüpfung im Dock (Mac) nur auf expliziten Wunsch des Nutzers hinzufügen würde. Wichtig ist jeweils das Programmmenü!
 
Ach Mensch Thomas,
denkst du wirklich ich würde mir diese Mühe machen wenn ich auch "einfach" WebStart nutzen könnte ?
Es ist ja gerade das Ziel solche Alternativen bereit zustellen wenn man eben wie ich auf WebStart verzichten möchte. *Wir hatten hier schon mehrere und auch im java-forum.org gibts da einige.*
Es ist ja richtig das Java uns mitlerweile einiges abnimmt, aber wenn man soetwas nicht mal selber macht versteht man es einfach nicht was genau da abläuft.
Klar könnte ich mir es einfach machen und fürs Setup und zur Versionskontrolle WebStart verwenden, aber genau das will ich eben nicht. Ich will das meine Applikationen 100% made by myself sind. Außerdem würde ich nicht fragen wie das bei Mac geht wenn ich nicht wirklich vor hätte es selbst umzusetzen.
Allgemein finde ich WebStart auch ETWAS überbewertet da z.B. der Internet Explorer selbst in Version 9 immer noch nichts mit einem JNLP-File anfangen kann und immer noch eine Downloadaufforderung anzeigt anstatt es einfach dierekt auszuführen.
Natürlich muss man sich etwas mehr arbeit machen wenn man zum Beipsiel ein Applet programmiert welches als Installer fungiert. Von der Signierung mal abgesehen welche benötigt wird um zugriff auf die Platte zubekommen.
Wie sieht es da eigentlich in Punkto WebStart aus ? Haben Applikationen die ich via WebStart verteile automatisch Rechte oder sind sie so eingeschränkt wie Applets ? Auch ist es etwas schwierig die WebStart-Files zu verwalten wenn man wie z.B. unter Linux kein Controllpanel hat wie unter Windows *Systemsteuerung > Java*. Desshalb bin ich dafür das man wirklich die komplette verwaltung seine Files auch selbst in die Hand nimmt. Und viel mehr als eine Checksum über die Files bilden macht WebStart auch nicht zur Versionskontrolle. Das kann ich dann auch selbst machen *zu mal WebStart glaube ich noch einen recht schwachen Algorythmus wie MD5 oder SHA-1 verwendet obwohl man heutzutage minimum SHA-256 verwenden sollte *Quelle : Wikipedia**.
Es gibt genug Pro und Kontra für beide Seiten. Letzendlich kommt es doch nur darauf an was der jeweilige Entwickler seinem Kunden zumuten möchte.

//EDIT

Uhups ... da haben wir wohl zur selben Zeit geschrieben.

Was Mac angeht : wenn es unwichtig ist ob es Mac für i386 gibt dann nenn mir mal bitte eine VM-Software die auf einem i386 oder x64 System *Windows* einen PowerPC-CPU emulieren kann. Da ich bis jetzt nur erfahrungen mit M$ Virtual PC und Sun/Oracle VM V-Box gemacht habe und sowieso kein Mac-OS rumliegen habe *egal ob PPC oder i386* ist es für mich schon sehr wichtig das ein OS auch die Hardware unterstützt auf der ich es installieren möchte.

Für die Hinweise bezüglich der Shortcuts
DANKE
Ich werde mich da mal genauer belesen und dann das hier entsprechend umschreiben.
Da ich vorwiegend Windows-User bin *Unix nur über VM-Software* bin ich es halt gewohnt das man einen Shortcut *oder wie es im deutschen Win-Umfeld nunmal heißt : Verknüpfung* auf den Desktop packt. Und da dieser bis jetzt in allen NT-basierten Versionen unter %WINDRIVE%:\%HOME_DIR%\Desktop zu finden war wäre es auch möglich einfach System.getProperty("user.home")+File.separator+"Desktop" zu nutzen. Aber wenn ich schon eine JNI-Möglichkeit habe die absolute Pfadangabe zu erhalten nutze ich lieber diese vom System übergebene als mir selbst was zusammenzubasteln.
Aber das es unter Unixoiden Systemen in dem Sinne gar kein Desktop gibt bzw dieser mitlerweile nicht mehr Standard ist erstaunt mich nun aber doch. Weil für mich ist es persönlich einfach ZU umständlich alles ins "Startmenü" zu werfen. Ich mein ... wenn ich so die Systeme meiner Bekannten sehe was die alles auf ihrem Desktop rumfliegen haben : Dateien , Verknüpfungen , ganze Ordner ... dann wundert es mich wie das unter Unix läuft ? Nur ein Shortcut *wenn überhaupt* ins Home-Dir und da dann diesen ganzen Wahnsinn ... naja gut ergibt irgendwie noch Sinn ... aber wäre dann für mich doch zu umständlich. Ich bin halt ein bequemer Mensch.
Und was Mac und seinen Desktop angeht : da ich noch nie an einem Mac gesessen habe kenn ich mich damit halt nicht aus. Aber wenn es wie du beschreibst änlich wie unter Linux abläuft wird mir klar warum Linux und Mac meistens nur von denen verwendet wird die entweder damit aufgewachsen sind oder sich da extrem gut "eingelebt" haben. Wie gesagt : ich habs nur über VM drauf weil ich hier und da dann doch mal Testen muss ob meine Applikation auch unter Linux halbwegs läuft. Ich möchte auf Grund meiner Windows-Gewohnheit nämlich nicht User anderer System ausgrenzen und mache mir desshalb die Mühe meine Apps wenigstens lauffähig zu halten.

//EDIT 2
So nach dem ich mir nun den Wiki-Artikel durchgelesen und dort die Zeile gefunden habe das Mac OS X 10.6 sogar nur noch für x86 entwickelt und vertrieben wird kann man also auf einer i386-basierten Architektur beruhigt 10.6 kaufen und Installieren

Was deinen Vermerk auf ~/.local/share/applications/ angeht *PS : ja ich weis wofür ~ unter Unix steht* :
Installier dir mal in z.B. einer Oracle VM V-Box OpenSuSE 11.4 mit KDE ... da gibt es dieses Verzeichnis nicht einmal ...
Und selbst mach dem ich Gnome nachinstalliert habe *offensichtlich Version 2 da ich diveres Ordner und Files gefunden habe die z.B. .gnome2 heißen aber keinerlei Ordner oder Files mit .gnome3 oder der gleichen* und auf diesen Desktop-Manager beim booten umgestellt habe habe ich auch dort dieses Verzeichnis nicht finden können. Eher im gegenteil : als ich manuell via Kontextmenü eine "Verknüpfung" oder wie es unter Gnome heißt "Starter" angelegt habe habe ich diesen schlussendlich auch wieder unter ~/Desktop gefunden. Ob das jetzt an (Open)SuSE liegt weis ich nicht da ich es einfach nicht geschafft habe Debian , Fedora , Ubuntu und sogar Solaris in Oracle VM V-Box zum laufen zubekommen. Desshalb habe ich ja auch geschrieben das hier Testbedarf von anderne Usern erwünscht ist.

Alles in allem scheint es doch ein sehr komplexes Thema zu sein was simple Launcher auf den verschiedenen Plattformen angeht.
 
Zuletzt bearbeitet von einem Moderator:
Hi,

@SPiKEe
erstmal: no offense :)
Ich habe mich bei meiner Antwort primär auf den Thread - Titel bezogen und beim Lesen deines Beitrags gesehen, dass Möglichkeit eines OS neutralen Launchers auf Basis von Java Webstart nocht nicht genannt wurde, deshalb hab ich die noch explizit erwähnt.

Allgemein finde ich WebStart auch ETWAS überbewertet da z.B. der Internet Explorer selbst in Version 9 immer noch nichts mit einem JNLP-File anfangen kann und immer noch eine Downloadaufforderung anzeigt anstatt es einfach dierekt auszuführen.
Diese Probleme kenne ich nicht. Bei mir starten unter Java Webstart Anwendungen in Internet Explorer 9 unter Java 6 (1.6.u25) ohne Probleme:
Beispiel: http://jbullet.advel.cz/

Manche Webserver sind nicht richtig konfiguriert und geben für die Dateiendung JNLP nicht den korrekten MIME-Type (application/x-java-jnlp-file) zurück, was dann dazu führt, dass ein Download-Dialog für die JNLP angezeigt wird.

Das lässt sich jedoch leicht in der Web Server Konfiguration korrigieren:
http://download.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/setup.html#steps

Haben Applikationen die ich via WebStart verteile automatisch Rechte oder sind sie so eingeschränkt wie Applets ?
Java Webstart Anwendung laufen Standardmäßig in einer Sandbox mit verschiedenen Einschränkungen ähnlich wie bei Applets. Über Signieren der Jars und / oder erweiterter Konfiguration kann man der Anwendung weitere Berechtigungen geben. Siehe: http://download.oracle.com/javase/tutorial/deployment/webstart/security.html

Btw. einer Webstart-Anwendung kann man auch JVM Argumente wie Speicher Konfiguration (-Xmx etc.) mitgeben, das geht bei Applets nur bedingt (man kann eine Umgebungsvariable mit default JVM Args für Applets setzen, aber die gelten dann für ALLE Applets...). Java Webstart Anwendungen sind hier um einiges flexibler als Applets.

Gruß Tom
 
Hmm .. hey Thomas
Gut ... das mit der fehlerhaften Server-Config würde wirklich einiges erklären da zum Beispiel die Samples im Sun-Tut wunderbar laufen ... auf einige anderen Servern sieht das da etwas finsterer aus. Danke für den Hinweis *erlich gesagt habe ich das noch nicht mal in betracht gezogen da ich dachte das das Clientseitig geprüft wird und nicht der Content-Type vom Server erforderlicht ist.

Was die Sandbox angeht :
Genau das will ich ja eben nicht. Ich brauche dann doch schon einigen Freiraum damit meine Applikationen richtig laufen. Desshalb mache ich mir auch die Mühe und schreibe ein Installer-Applet welches signiert wird um die Sandbox zu umgehen und die Applikation mit vollen Rechten auf dem System zu installieren. Denn schließlich hat ja eine Applikation welche bewusst vom Anwender als solche gestartet wird keine Sandbox. Ich bin schon oft in Exception-Stacks gerannt nur weil ich mal wieder übersehen hatte das die eine oder andere Aktion dann doch in der "normalen" Sandbox blockiert wird.es behindert mich einfach wenn ich nur um der Sandbox gerecht zu werden haufen Extrazeilen schreiben muss anstatt einfach die Sandbox auszuschalten und dann das was ich will in EINER Zeile auszuführen. Oder einige andere Dinge die innerhalb der Sandbox schlicht nicht laufen : File-IO auf die Platte.

Was die JVM-Parameter angeht :
Das kleine Install-Applet braucht ja nun keine extra Anforderungen. Da reichen die normalen Werte aus. Wenn man nun z.B. mehr Heap braucht kann man das einfach im Shortcut als Parameter mit angeben. Das ist nun wirklich das kleinere Übel.

Für mich viel wichtiger ist ja möglichst auf fremd-Code zu verzichten. Gut .. bei einigen Dingen wie z.B. JShortCut könnte ich auch sagen : Copy&Paste und schon ists meins ... nein ... da nenne ich dann auch schon den Autor. Aber gerade was Dinge wie eben WebStart angeht oder hauseigene Mittel von Java entsprechend meistens nicht dem was ich mir vorstelle. Na klar bin ich dankebar für Sachen wie JFileChooser oder den static JOptionPane-Methoden ... die erleichtern dann das Leben doch etwas ... aber es ist letzten Endes nichts was man mit einegem Aufwand auch nicht selbst schreiben könnte.
Außerdem verwende ich ein selbst entwickeltes Versions-Controll-System was mit meiner Umgebung auf meinem Rechner zusammen arbeitet. Um das alles so hinzubekommen habe ich schon einige Zeit gebraucht und möchte jetzt erlich gesagt mir nicht noch mal die Mühe machen und auf ein vielleicht bekannteres System migrieren. Ich bin mit dem zufrieden wie ich es mir eingerichtet habe und die Applikationen die einen Update-Mechanismus haben können via Net-Anbindung mit diesem System kommunizieren.

Was ich in diesem Thread hier eigentlich vorhabe ist nach Umsetzungsmöglichkeiten zu suchen die sich zu meinem bisherigem System ergänzen lassen und nich eine völlige migration auf ein anderes System benötigen.
Was das verwenden von Shortcuts auf Linux und vor allem Mac *welches ich mir noch besorgen muss* angeht werde ich mich wie oben bereits erwähnt noch einarbeiten (müssen) ... aber dann lediglich mit dem Vermerk das es unter gewissen Systemen getestet , jedoch nicht offiziell unterstützt wird.

Genau wie meine sicht der Dinge schon im Vorfeld mit Java 7 zu arbeiten. Gut ... da es noch in der Beta-Phase ist sollte man natürlich nicht verlangen das sich jetzt alle nur ums zum laufen zu bekommen dieses ebenfalls installieren müssen. Jedoch bin ich dann bereits für den offiziellen Launch von Java7 vorbereitet und dann kann ich auch verlangen das für meine Apps Java7 installiert werden MUSS.
Einige Vorteile von Java7 kann ich dir nennen :
-java.nio.file - Paket
-java.net.URLClassLoader implementiert endlich das Closeable-Interface
-duetlich verbesserte Performance der Server-Engine
-allgemein umfangreicher und einige neue Funktionen welche schon in 1.3 bemängelt wurden

Auch werde ich es mir weiterhin nicht nehmen lassen so viel wie möglich low-level programmierung zu betreiben. Es ist richtig das es z.B. für HTTP Frameworks gibt , doch manchmal muss man doch ETWAS tiefer als es einem diese Frameworks erlauben.
 
NACHTRAG
Ein sehr großes KNOTRA an WebStart : unter Linux steht WebStart nicht automatisch zur verfügung. Bei meinem Test unter OpenSuSE 11.4 KDE 4 war im FireFox weder das über YaST installierte Sun-1.6.0-u26 noch das manuell eingefügte jdk-7-ea-b145 Java-Plugin fähig weder den MiME-Type appliation/x-java-jnlp-file noch die Extension .jnlp automatisch zu verarbeiten. Es kam stattdessen eine Downloadaufforderung. Nach sehr langem googlen bin ich dann auf die Dateitypzuordnungen gestoßen und habe dort .jnlp (application/x-java-jnlp-file) mit javaws verknüpft. So weit so gut ... nur kam im FireFox immer noch die Download-Aufforderung obgleich diesmal mit dem Unterschied das anstatt DOWNLOAD die Option AUSFÜHREN (mit javaws) ausgewählt war. Einzig die manuelle Entscheidung das .jnlp IMMER mit javaws auszuführen ist führt unter Linux mit FireFox dazu das WebStart-Anwendungen auch über WebStart gestartet werden. Das wirklich nervige daran ist jedoch das IMMER NOCH das Download-Fenster aufgeht welches mir das erfolgreiche Herunterladen des JNLP-Files in einen TEMP-Ordner vermerkt.
Ich habe es auch versucht unter GNOME 2 zum laufen zu bekommen .. jedoch ist dieses beim ersten Login-Versuch gecrashed und hat sich danach nicht mehr starten lassen. *Gnome 3 steht so über YaST nicht für OpenSuSE 11.4 zu verfügung ... vermutlich weil das 2.6.37.x Kernel verwendet wird*
Und ich kann es niemanden zumuten das er nur um WebStart nutzen zu können sich diesen aufwand macht. Jetzt kommen sicher einige : warum in den Dateitypzuordnungen rumwühlen ? ... Nun .. ich weis nicht ob dies beim "normalen" Install über YaST gesetzt wird oder wie es unter anderen Distributionen aussieht ... fakt ist jedoch das es zumindest für den FireFox KEIN offizielles Sun-Plugin gibt welches dierekt den MiME-Type application/x-java-jnlp-file (.jnlp) mit WebStart startet.
Wie oben bereits erwähnt : ich besitze keine Mac-Software ... weis daher auch nicht wie es unter Mac läuft ...
Ich persönlich bevorzuge es , wenn man schon WebStart nutz(en soll) , das dies ebenfalls so unproblematisch wie unter Windows abläuft. Andernfalls kann ich mir auch für jede Distribution mit jedem Desktop-Management was ich unterstützen will die Mühe machen einen ShortCut zu platzieren als wenn ich mir die Mühe mache und versuche überall herauszubekommen wei man nun JNLP mit javaws verknüpft und das einem User auch noch halbwegs verständlich rüberbringt. Das ist es mir einfach nicht wert.
Und was die Sache von Gnome 3 und dem standardmäßig abgeschaltetem Desktop angeht : wer denkt sich denn bitte so einen SCHWACHSINN aus ? Ist ein Desktop nicht genau dafür da ... sich eben die lästige Klickerei im "Start-"Menü zu ersparen ? ... Wird wohl der Hauptgrund sein mich ausschließlich mit KDE 4 zubeschäftigen *davon abgesehen das ich es ja noch nicht mal schaffe Gnome 2 zum laufen zu bekommen*

Was sämtliche anderen Linux-Distributionen angeht
Es ist mir leider NICHT möglich eine andere Distribution als OpenSuSE in Oracle VM Box zum laufen zu bekommen. Sicher schaffe ich es irgendwie Fedora 15 und Debian halbwegs bis auf die GUI zu ziehen *ich vermeide hier den Begriff Desktop da das für mich keiner ist* ... und dann war es das auch. Unter Fedora streikt dann erstmal so ziemlich das gesamte System da es nicht möglich ist den Gnome 3 Desktop aufzubauen *ganz witziges Spiel : wenn ich der VM nur sehr schlechte Werte für das Grafiksystem übergebe wird ein sog. FallBack-Modus gefahren ... gebe ich aber Werte an die mein Host locker bereit stellt passiert nach dem erfolgreichen Login NICHTS mehr ... es baut sich nichts auf ... ich kann nicht mal in eine andere Console wechseln ... NICHTS ... und auch ein X-Server restart mit STRG+ALT+BACKSPACE lässt die VM nur komplett crashen* und Debian verweigert mir sämtliche Möglichkeiten , mal davon abgsehen das ich mit Meldungen überhäuft werde das Update verfügbar sind aber im Updater selbst steht : System auf aktuellem Stand ... nicht gerade ein UNIVERSELLES SYSTEM wenn ihr mich fragt ...
Auch die "Verwaltung" bei Debian ist weit von dem entfernt was ich unter OpenSuSE gewöhnt bin. Es ist einfach zu abgespeckt und einige wichtige Funktionen fehlen komplett.
Ubuntu war mir nicht möglich zu installieren da beim NetInstall nach dem laden des Kernels beim "installiren" des Grundsystems "ein schwerwiegender Fehler" auftritt ...
Liegt es vielleicht daran das ich ALLE System via NetInstall installieren wollte ? ... ich meine ... wenn alle Distributionen auf dem selben Kern aufbauen ... warum ist dann OpenSuSE die einzige die es schafft komplett hochzufahren ? Hier scheint etwas Grundlegendes nicht zu stimmen.
Und für die die jetzt meinen : lad dir halt die DVD runter ... TJA ... was meint ihr wohl warum ich das NetInstall vorziehe ? ... mit einer 6000er Leitung ist man sehr schnell am Ende seiner Möglichkeiten. Außerdem will ich mir keine 3GB bis 4GB runterladen wenn ich davon eigentlich nur 600MB bräuchte *laut OpenSuSE NetInstall - Softwareauswahl : 600MB zu downloaden > installierte Größe 1,7GB*
Auch witzig fand ich es als ich versucht habe an RedHead zukommen ... ich kann mich daran erinnern das es vor einigen Jahren noch frei zugänglich war ... mitlerweile wollen die Kohle sehen ... und das für ein OS was bis ein paar 100MB den se selbst geschrieben haben OPEN SOURCE is ? ... Was ist das denn bitte ? .. Für mich nur Geldmacherrei ... unerhört sowas.

Andere Linux Distributionen habe ich bis jetzt noch nicht ausprobiert da es mir eigentlich schon bis zum Hals steht das ich entweder scheinbar zu BLÖD bin für Linux oder das in der Oracle VM Box so gut wie nichts läuft ... noch einen anderen Grund kann ich mir nicht erklären ...
*Für die Helden die jetzt sagen wollen : installier es doch nativ ... mit einer 40GB System-Platte wo Win 7 Ulti x64 schon über die hälfte braucht wird das schelcht machbar sein.*

Vielleicht muss ich mich sogar dazu entschließen die kompatibilität aufzugeben und mich rein auf Windows zu konzentrieren.
Wobei auch hier gibt es Probleme
Wenn man unter einem Win2k mit ALLEN Updates versucht das JRE 7 *oder wahlweise auch das JDK 7* zu installieren bekommt man an den Kopf gedonnert das es keine zulässige Win32-Anwendung wäre ...
Wie jetzt ... kan Win2k nicht mit i586-Code umgehen ... tja ... und das nächste System was von der Liste fliegt.
Was jetzt noch überbleibt ist gering :
Win XP Pro SP2 *Version 2002 ohne jegliche Updatemöglichkeit da mir Win Update an den Kopf knallt : Produkt nicht mehr im Handel verfügbar - bitte Upgrade auf Win 7 ... TOLL*
Win Vista Home Premium x86 *HP-OEM halt ... für das betreffenden Notebook gibt es keine offizielle Hardwareunterstüzung für Win 7 *frei nach dem Motto : wenn du ein Notebook mit Win 7 willst DANN KAUF DIR EINS**
Win 7 Ulti x64 up-to-date *mein System* ...
Und auf allen natürlich JDK 7 early access b145 installiert ...
Tja .. da wird das ganze Thema irgendwie etwas schwierig ...
 
Gnome3 gibt es in OpenSuse 11.4 nicht (zumindest nicht in den stabilen Repositories), weil es erst im April 2011 veröffentlicht wurde und noch selten mit Linux-Distributionen ausgeliefert wird. Grund dafür ist, dass es noch etwas instabil läuft und es noch fast keine Konfigurationsmöglichkeiten gibt.

Dein Problem mit Java Web Start/JNLP kann ich nicht nachvollziehen, funktioniert bei mir (Ubuntu 10.04, 10.10, 11.04, Debian stable) problemlos.

Für Firefox gibt es natürlich ein Java-Plugin, aber das hat nichts mit der Sache zu tun.
Ausschlaggebend ist nur, dass der MIME-Typ korrekt mit Java Web Start verknüpft ist, aber das ist bei installiertem Java (nie) ein Problem, solange du nicht deine MIME-Database zerschießt. Die MIME-Zuordnung funktioniert aber auch ohne Browser-Plugin! Du kannst bei den meisten Linux Distros eine JRE installieren, ohne dabei ein Browser-Plugin zu installieren. für JNLP ist die JRE zuständig, das Browser-Plugin ist ausschließlich für Java-Applets zuständig.

Dass Gnome 3 keinen Desktop nutzt bzw. ihn standardmäßig deaktiviert, finde ich gar nicht so abwegig, aber die Diskussion darüber würde hier den Rahmen sprengen. So ein lästiges Startmenü gibt es bei Gnome 3 auch nicht mehr – sondern einen Schnellstarter, über den Dateien viel schneller zu erreichen sind als über den Desktop.

Fedora nutzt Gnome 3, das läuft bei dir nicht, weil die genutzte Virtualisierungssoftware keine Grafikbeschleunigung unterstützt (oder jedenfalls nicht so viel wie Gnome 3 benötigt, viel ist es ja nicht)

Netinstall kann ich nicht beurteilen, ich habe die Netzwerkinstallation bisher nur bei Arch verwendet, aber das ist sowieso völlig anders.
Wie viel RAM hast du den Virtuellen Maschinen zugewiesen? hast du in deiner Virtualisierungssoftware auch das richtige Betriebssystem eingestellt? Ist dein RAM evtl. kaputt?

Die von dir genannten Distributionen sollten eigentlich auch von dem Installationsmedium booten können und als Live-System in vollem Funktionsumfang (von der CD) zur Verfügung stehen.

RHEL (Red Hat Enterprise Linux) ist, wie der Name schon sagt, kommerzielle Software. Die freie Variante ist Fedora.

BTW: nicht frustrieren lassen. Es gibt so viele Java-Programme, die auf verschiedenen Systemen einwandfrei laufen, die meisten der hier genannten Probleme sind Einzelfälle bei dir. Wie oben schon geschrieben, ich fürchte, dass dein RAM defekt ist (probier mal Memtest) oder du zu wenig davon zugewiesen hast. 512MB sollten Minimum sein, besser >1GB. An sonsten vllt VirtualBox neu installieren. Und einfach darauf vertrauen, dass es mit JNLP funktioniert!
 
Zuletzt bearbeitet:
Hey genodeftest,
da muss ich deinem Post aber mal etwas entgegensetzen.
Ich versuche dabei mal von oben nach unten durchzugehen.

Das Gnome 3 nicht in den stable-Respos ist da es erst April released wurde wusste ich natürlich nicht. Kenne mich da so halt nicht aus.

Das mit der MiME-Datenbank mag zwar so alles seine Richtigkeit haben ... aber wie ich bereits erwähnte : selbst mit dem über YaST installiertem Sun Java6u26 und anschließendem reboot waren die Java-Typen NICHT zugewiesen. Z.B. Jar ... welches eigentlich so verknüpft sein sollte das es mit /usr/bin/java gestartet wird ... war zwar in der MiME-DB vorhanden aber mit Ark verknüpft. JNLP sogar mit Kwrite. Und das alles BEVOR ich manuelle Änderungen vorgenommen habe. Hier scheint also entweder bei OpenSuSE der Hase im Pfeffer zu liegen oder irgendetwas scheint schiefgelaufen zu sein. Fakt ist : egal ob manuell editiert oder über YaST "installiert" blieb das Ergebnis das in dem Sinne eben NICHTS dergleichen eingerichtet wurde.

Gnome 3 und Schnellstarter ...
naja gut ... ob ich jetzt etwas Mac ähnliches am Rand kleben habe was der Windows Startleiste gleichkommt oder dierekt aufm Desktop die Icons habe ... das macht für mich keinen Unterschied.

Was die Config der VM angeht
man hat in Oracle VM Box die möglichkeit den genauen Typ des Gast-Systems anzugeben was schon automatisch getan wird wenn man als Name für die VM den Name des Systems angibt. Z.B. wird wenn ich die VM "Fedora 15" angebe als System automatisch "Linux - Fedora" ausgewählt. Und das bei so ziemlich jeder Linux-Distribution deren Name mir was sagt ... hier sollte es also keine Probleme geben.
Was die zuweisung von Resourcen betrifft : in Oracle VM Box ist es nur für Windows-Gäste *und auch hier erst ab minimum Win XP* möglich 3D-Hardwarebeschleunigung zu aktivieren. Bei Linux Gästen kommt eine Fehlermeldung das dies nicht unterstützt wird und die Option wird wieder deaktiviert. Auch bei der Einstellung des Video-RAM habe ich die größt mögliche Option von 128MB gensetzt. Meine Grafikkarte *ATI Radeon HD 4550 für alle diejenigen die es interessiert* hat satte 512MB RAM ... zusätzlich werden ihr vom BIOS weitere 512MB zu verfügbarkeit gestellt was zur folge hat das obwohl in meinem System 4GB Dual-Channel installiert sind mir vom BIOS nur max 3,3GB zur verfügung gestellt werden. *Ja , ich habe das aktuellste BIOS-Update installiert.* Alles was über diese 3,3GB hinausgeht geht aber zum Glück nicht verloren sondern wird der Hardware zugesichert so dass meine Grafikkarte laut Treiber 1GB hat. Auch bekommt mein RAID-Controller vom Rest etwas ab. *Komischerweise sogar auch meine Soundkarte was meinen Sound-Buffer erhöt ... Dinge gibt es ...*

Defekten RAM kann ich definitiv ausschließen da die 4 Module keine 3 Wochen alt sind. Auch läuft mein Windows 7 ohne jede Macke. Laut Resourcenmanager habe ich bis jetzt keine RAM-Fehler *sog. Pagefehler* ... hier ist also alles in Ordnung.

Was die Live-Distributionen angeht : ich habe sie mir aus dem Grund nicht geladen da ich nicht weis welche ein Setup auf die Platte anbietet. Ich will es ja nicht jedesmal im RAM haben sondern im Platten-Image als installiertes System.

Red Hat *sorry das ichs oben falsch geschrieben habe* war wie gesagt vor einigen Jahren noch frei zu bekommen ... das die aktuelle freie Variante Fedora heißt habe ich auf der Seite erfahren =D.

Was die zuweisung des VM-RAM angeht : hier setzt Oracle VM Box schon ein minimum von 512MB *bei Ubuntu hat er sogar automatisch 768MB zugewiesen* ... natürlich habe ich diese werte auf 1GB erhöt da ich es mir ja mit 3,3GB nutzbarem RAM erlauben kann 2 VMs mit je 1GB laufen zu lassen und mein Host-System hat trotzdem noch 1,3GB für sich zur verfügung was locker ausreicht *ich habe dann unter Volllast noch gute 200MB FREI*.

Und was ein neu-Setup angeht ... das habe ich mitlerweile gefühlte 10mal gemacht ... mit dem Ergenis : KEIN UNTERSCHIED

Zu Mac und WebStart
Ich habe mich nochmal auf einigen Sun-Seiten belesen in denen geschrieben steht das Mac von Haus aus Java mitliefert *zwar nicht die aktuellste Version aber die kann man in der Softwareverwaltung updaten so weit wie ich es verstanden habe*. Dort ist natürlich auch dierekt nach dem Install von Mac OS X WebStart lauffähig eingerichtet.

Aber mein Fazit ist : da ich von den vielen verschiedenen Linux-Distributionen nur OpenSuSE mit KDE 4 zum laufen bekomme und kein Mac OS X besitze werde ich mich wohl dafür entscheiden nur Windows offiziell zu unterstützen. Sollte ich dann doch mal die Chance haben das sich ein Linux- oder Mac-Dev in mein Team verirrt werde ich natürlich versuchen mit ihm auch andere System zu unterstützen. Da das aber zur Zeit nicht der Fall ist wird es da so schnell keine Änderungen geben.

Noch was zum L&F
ich habe festgestellt das sich das Standard-L&F *ich habe keine Ahnung welches das ist* unter den verschiedenen Systemen sehr eigensinnig verhält. So kann ich eine Applikation welche ich unter meinem Windows 7 entwickelt habe zwar unter OpenSuSE ausführen ... aber die GUI stimmt überhaupt nicht mehr. Und dabei habe ich schon den Code nach möglichen absoluten Angaben abgesucht. Bis auf die Fenstergröße war nichts zu finden. Ich musst letzten Endes das Fenster um satte 200 Pixel auf ganze 900 Pixel Breite vergrößern damit die GUI wieder so lief wie ich es unter Windows erdacht hatte, was natürlich dazu führte das unter Windows links und rechts jeweils 100 Pixel luft waren.

Was ich nun also vorhabe
Ich werde versuchen mein Projekt so zu entwickeln das die GUI strickt von der Logik getrennt ist *ich weis das man das immer machen sollte .. aber in manchen Fällen weis ich halt nicht wie ich das anstellen soll* und ich dann für jede Plattform eine extra GUI schreibe. So kann zumindest sichergestellt werden das dann unter den Systemen für die eine GUI existiert diese auch dem entspricht wie ich es unter Windows konzipiert habe.
 
Zu Oracle VirtualBox: Solange die keine 3D-Beschleunigung für Linux unterstützt, gibts auch kein Gnome3 oder sonstige Desktop-Effekte unter Linux zu sehen.

Zur Verzerrung deiner Fenster:
Deswegen sollte man bei GUIs am besten gar nicht mit absoluten Werten arbeiten, sondern die Größenberechnungen von den LookAndFeels durchführen lassen. Das LookAndFeel ist nämlich:
- nicht genormt, d.h. jede Java-Implementierung darf andere LnFs für Swing ausliefern
- nicht fest eingestellt, d.h. auf manchen Systemen ist z.B. Motif das Standard-LnF
- von der DPI-Zahl abhängig,
•WINDOWS: 96dpi,
•Mac:72dpi,
•Linux: verschieden und häufig manuell konfigurierbar
•…(siehe https://secure.wikimedia.org/wikipedia/en/wiki/Dots_per_inch#Computer_monitor_DPI_standards )
- vom systemeigenen Erscheinungsbild abhängig (Windows: "Ansicht", Gnome2: "Erscheinungsbild", ...)
- von den verwendeten Grafikbibliotheken abhängig (Qt/KDE, GTK2, GTK3, ...)
... (Liste beliebig fortsetzbar)
 
Zuletzt bearbeitet:
Zurück