[[Vorlage(InArbeit, Datum,)]] ##aasche: Wissensblock fehlt... [[Inhaltsverzeichnis()]] Dieser Artikel soll Tipps und Hilfestellung bei Problemen im Umgang mit Java geben. [[Anker(Versionswahl)]] = Verwendete Java-Version einstellen = Eines der häufigsten Einsteigerprobleme: es ist möglich, mehrere verschiedene JREs und SDKs zu installieren. Welche Version tatsächlich systemweit benutzt wird (z.B. durch Eingabe von "java" in der Shell), kann man mit Hilfe des [:Alternativen-System:Alternativen-Systems] einstellen. Diese Einstellung kann man mit `--config java` für die ''"Java Virtual Machine"'' (JVM, in JRE enthalten) und mit `--config javac` für den ''"Java Compiler"'' (in JDK/SDK enthalten) vornehmen: {{{#!vorlage Befehl sudo update-alternatives --config java }}} Durch die Eingabe der entsprechenden Zahl vor der gewünschten Java-Variante oder -version wird die Auswahl gespeichert. = Java wird nicht gefunden = In manchen Fällen kann es vorkommen, dass Java-Programme nach der Installation nicht ausgeführt werden können. Man erhält dann im Terminal nur die Nachricht {{{ bash: java: command not found }}} Dies liegt an einer fehlerhaften Verknüpfung. Um dies zu beheben, öffnet man ein Terminal [3] und legt die Verknüpfung in '''/usr/bin''' korrekt an: {{{#!vorlage Befehl cd /usr/bin sudo rm java sudo ln -s /etc/alternatives/java java }}} Danach sollte Java wieder starten. = Java & Desktop-Effekte = Es kann vorkommen, dass grafische Java-Applikationen nicht korrekt dargestellt werden, wenn die [:Desktop Effekte:] aktiviert sind. Die Applikation wird dabei zwar gestartet, jedoch wird außer einem leeren, grauen Fenster nichts angezeigt. Ruft man die selbe Java-Anwendung auf, wenn die Desktop Effekte deaktiviert sind, so wird auch der Inhalt (Buttons, Eingabefelder, ...) einwandfrei angezeigt. Dieses Problem lässt sich für alle (?) Java Versionen leicht lösen: == Java 6 == Für die neueste Version von Java gibt es einen einfachen Lösungsweg. Dazu öffnet man die Datei '''/etc/environment''' mithilfe eines Editors welcher Root-Rechte hat[4] und fügt am Ende der Datei die folgende Zeile hinzu: {{{ AWT_TOOLKIT="MToolkit" }}} Um die Einstellung zu sofort übernehmen, kann entweder die Umgebungsvariable durch Eingabe von {{{ export AWT_TOOLKIT="MToolkit" }}} sofort gesetzt werden, oder der [:XServer_einrichten#XServer-neu-starten:X-Server neugestartet] werden. {{{#!vorlage Hinweis Dadurch werden alle laufenden Programme beendet. }}} [[Anker(Plugin_aktivieren)]] = Java-Plugin für Browser aktivieren = {{{#!vorlage Hinweis Dieses Verfahren ist nur dann notwendig, wenn man Java nicht als fertiges Ubuntu-Paket (mit Browser-Plugin) installiert hat. }}} Damit die gewünschte Java-Version benutzt werden kann, muss ein Link zu einem entsprechenden Plugin für den verwendeten Browser gesetzt werden. Möglicherweise ist noch das Plugin einer älteren/anderen Java-Version vorhanden. Daher sollte man zunächst das Plugin-Verzeichnis des Browsers überprüfen und veraltete Links löschen. Ein Java Browser-Plugin hat immer die Endung .so (Shared Object), was bedeutet, dass dies eine Programmbibliothek ist, die sich mehrere Programme teilen können. In der Regel heißt das Java-Plugin '''libjavaplugin_oji.so'''. Je nach verwendeter Java-Version (Sun, Blackdown ...) befindet sich das Plugin an anderer Stelle im Dateisystem. Am leichtesten lässt sich der Speicherort mit dem folgenden Befehl im Terminal [3] herausfinden: {{{#!vorlage Befehl update-alternatives --list java }}} Die Ausgabe sieht dann beispielsweise so aus: {{{ /usr/bin/gij-wrapper-4.1 /usr/lib/jvm/java-6-sun/jre/bin/java /usr/lib/j2se/1.4/bin/java }}} Der erste Eintrag zeigt den Pfad zum standardmäßig installierten GNU-Java. Die beiden weiteren Pfade zeigen jeweils auf die [#JVM JVM]. Pfad Nummer 2 zeigt auf die JVM von Sun Java 6 und der dritte Pfad steht für die JVM von Blackdown Java. Für den Browser wird aber nicht die JVM, sondern ein Plugin benötigt. Am einfachsten ist es, den [:Dateimanager:] zu öffnen und hier dem angegebenen Pfad zu folgen, bis man auf das Verzeichnis '''plugin''' stößt. Hier befindet sich in der Regel die o.g. Datei. Vollständige Pfade zum Plugin kann man den unten angegebenen Befehlen entnehmen. Möchte man nun eines der Plugins mit dem Browser Firefox verlinken, so muss man zunächst den korrekten Pfad heraussuchen und anschließend mit dem Befehl [:ln:] im Terminal [3] den Link zum Plugin-Verzeichnis des Browsers setzen. Für Sun Java 6 sieht der Link unter Edgy Eft 6.10 so aus: {{{#!vorlage Befehl sudo ln -sf /usr/lib/jvm/java-6-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/firefox/plugins/ }}} Für Blackdown Java sieht der Link folgendermaßen aus: {{{#!vorlage Befehl sudo ln -sf /usr/lib/j2se/1.4/jre/plugin/i386/mozilla/libjavaplugin_oji.so /usr/lib/firefox/plugins/ }}} Für OpenJDK Java sieht der Link folgendermaßen aus: {{{#!vorlage Befehl sudo ln -sf /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so /usr/lib/firefox/plugins/ }}} Dies sind natürlich nur Beispiele. Bei anderen Versionen von Java und/oder Ubuntu muss der Befehl angepasst werden. [[Anker(Ubuntu64bit)]] = 32bit-Java-Programme = [[Bild(Wiki/Icons/ubuntu64.png, 80, right)]] Zwar gibt es nicht viele Fälle, aber es kommt vor, dass man ein 32bit-Java-Programm ausführen muss, das zwingend eine 32Bit-Version von Java voraussetzt (z.B. [:Wuala:]). Dies kann jedoch parallel zur 64bit-Version erfolgen, d.h. für Java-Anwendungen, die nicht im Browser laufen, kann die 64bit-Version weiter genutzt werden. Daher muss auf einer [:64bit-Architektur:64Bit-Installation] von Ubuntu zuerst eine 32bit-Version von z.B. Sun Java [http://www.java.com/de/download/manual.jsp?locale=de&host=www.java.com:80 heruntergeladen] {dl} ("Linux (selbstextrahierende Datei)", ''nicht'' RPM), ausführbar [6] gemacht und ausgeführt [5] werden. Wird man nach dem Zielpfad gefragt, wählt man ein separates (beliebiges) Verzeichnis - so können auch bereits bestehende Java-Versionen nebeneinander installiert werden. Dadurch wird ein neues Verzeichnis, beginnend mit '''jre''', erstellt. Nun lässt sich das auszuführende 32bit-Java-Programm wie Wuala über einen Befehl, den man im Terminal[2] eingibt oder sich z.B. als Programmstarter einrichtet, starten (die Verzeichnis-Pfade müssen entsprechend des Installationsortes vom oben angegebenen Verzeichnis der JRE und des Programmverzeichnisses angepasst werden): {{{#!vorlage Befehl /home/benutzer/jre*/bin/java -jar /home/benutzer/wuala/wuala }}} == 32bit-Browser == Die Konfiguration im Browser ist hier am Beispiel von [:Opera:] gezeigt: im Menü ''"Tools -> Preferences -> Advanced -> Content"'' gibt man mit ''"Java options..."'' den Pfad der zuvor installierten Java-Version an (z.B. '''/home/apps/jre1.5.0_06/lib/i386''') und setzt danach das Häkchen bei ''"Enable Java"''. Nach einem Neustart des Browsers sollten dann Java-Applets funktionieren. [[Anker(Java_Optimierung)]] = Programme beschleunigen = Man sollte zuerst die Dokumentation des Programms studieren, und die Entwickler fragen, wie man mit Performanceproblemen am besten umgeht. Nur in wenigen Fällen mögen die folgenden Tipps wirksam sein. Ein Wundermittel gibt es nicht. Als Beispielaufruf sei der Befehl {{{#!vorlage Befehl java -jar myFancyGuiApp.jar }}} gegeben. Auf unixoiden Systemen wird nicht automatisch die OpenGL-Beschleunigung verwendet. Um diese einzuschalten - das ist nur bei 2D oder 3D-Grafik sinnvoll - verwendet man den Parameter ''-Dsun.java2d.opengl=true'' (siehe [http://java.sun.com/j2se/1.5.0/docs/guide/2d/flags.html#opengl System Properties for All Platforms] {en} / [http://java.sun.com/j2se/1.5.0/docs/guide/2d/new_features.html#ogl Support for Hardware-Accelerated Rendering Using OpenGL] {en} ): {{{#!vorlage Befehl java -Dsun.java2d.opengl=true -jar myFancyGuiApp.jar }}} Je nach Rechnerarchitektur (z.B. 64bit-System) wird als Standard (siehe [http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html Server-Class Machine Detection] {en} ) die Server-VM verwendet. Um die für Client-Anwendungen optimierte VM zu verwenden, muss man auf solchen Systemen explizit den Parameter ''-client'' angeben: {{{#!vorlage Befehl java -client -jar myFancyGuiApp.jar }}} Es hängt dabei von der verwendeten VM ab, ob eine Client-VM für 64bit verfügbar ist. Suns 5.0 64bit VM scheint noch keine Client-VM zu unterstützen, der Parameter schadet aber nicht. Insofern sollte jede grafische Anwendung mit dem Parameter ''-client'' gestartet werden. In wenigen Fällen, in denen der Speicherbedarf an der Grenze dessen ist, was die Defaulteinstellungen sind - 64 MB - kann man Geschwindigkeit herausholen, indem man der Anwendung mehr als die maximalen 64 MB zur Verfügung stellt. Hierzu dient der Parameter ''-Xmx'': {{{#!vorlage Befehl java -Xmx256m -jar myFancyGuiApp.jar }}} Das hat aber nur einen Effekt, wenn das System durch häufiges Laufen der Garbage Collection belastet wird, und diese läuft nur, wenn es nötig ist. Benötigt die Anwendung in Wahrheit viel weniger Speicher, so entzieht man nur sinnlos dem restlichen System Speicher. Natürlich kann man auch alle miteinander kombinieren: {{{#!vorlage Befehl java -client -Xmx256m -Dsun.java2d.opengl=true -jar myFancyGuiApp.jar }}} Diese und weitere Parameter sind auch noch einmal in den [http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/java.html#options Java options] {en} erläutert. Es gibt noch zahlreiche weitere Parameter, um die Java VM zu tunen, aber die hier vorgestellten sind die einfachsten, welche auch meist die größte Wirkung bringen. Natürlich ist eine spürbare Beschleunigung damit nicht zwingend garantiert, aber man sollte es mal ausprobieren und staunen, warum das nicht als Standard so schnell geht. = Java WebStart = Es kann vorkommen, dass eine Java WebStart-Anwendung zwar mit dem Java-Startbildschirm startet, dann aber nach langem Warten nur eine Fehlermeldung erscheint: {{{ java.net.MalformedURLException: unknown protocol: .... }}} Dieser Fehler liegt in den Proxy-Einstellungen von Java. Um den Fehler zu beheben, muss man unter GNOME ''System -> Einstellungen -> Sun Java 6 Plugin Control Center'' öffnen und dort in den Netzwerkeinstellungen "Direkte Verbindung" auswählen bzw. die korrekten Proxy-Einstellungen machen. Die automatische Proxy-Auswahl über den Browser funktioniert nicht. = Online Java-Applets für den Offline-Gebrauch herunterladen = Will man ein auf einer Webseite gefundenes Java-Applet auch offline nutzen können, ohne das dieses auf der Homepage explizit zum Download angeboten wird, hilft folgendes Vorgehen: 1. Die aufrufende Homepage lokal speichern Die Homepage, in die das Applet eingebunden ist, wird lokal gespeichert. 2. Java-Code im Quelltext suchen Öffne die heruntergeladene html-Datei mit einem Texteditor und finde den Code, der das Java-Applet aufruft. Dieser müsste in etwa so aussehen: {{{ }}} 3. Die angegebenen Abhängigkeiten herunterladen Die Dateien, die unter "archive=" und "code=" angeben sind müssen nun herunter geladen werden. Ihre Pfade sind relativ zu dem Pfad der html-Datei angegeben, in der sich der Code für das Java-Applet befindet (für die Datei "jarfile1.jar muss man also zwei Ordner nach oben und dann in den Unterordner "test" wechseln). Ermittle die Pfade der Dateien und gib diese jeweils in die Adresszeile deines Browsers ein. Da dieser .jar und .class Dateien nicht öffnen kann, werden sie dir zum Download angeboten. Speicher sie alle in dem selben Ordner mit der html-Datei. 4. Dateipfade anpassen Nun müssen in der html-Datei noch eventuell die Dateipfade angepasst werden, da sich ja nun alle Dateien im selben Ordner befinden. Aus dem obigen Beispiel wird also {{{ }}} Danach wird die html-Datei gespeichert und geschlossen. Anschließend kann das Applet durch öffnen der html-Datei in einem Browser geöffnet werden. = JAVA_HOME einstellen = Für manche Umgebungen wie z.B. Tomcat Jetty Geronimo (JSP, Servlets, JSF) muss die Umgebungsvariablen für alle Nutzer gesetzt werden. J2SE JDK muss installiert sein. Zuerst muss man nachsehen, wo der bin-Ordner von Java für '''javac''', '''javadoc''' u.a. ist: {{{#!vorlage Befehl ls -la /etc/alternatives/javac }}} zum Beispiel {{{ /etc/alternatives/javac -> /usr/lib/jvm/java-1.5.0-sun/bin/javac }}} Nun muss die Environment-Einstellung für alle Nutzer eingestellt werden. Dafür die Datei '''/etc/environment''' in einem Editor mit Root-Rechten öffnen [4] und dies eintragen: {{{ #Pfad zum Java SDK-Basis-Ordner - kein Slash am Ende! JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun }}} Anschließend abmelden und neu anmelden. ---- #tag: Internet, Programmierung