<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=L-ectron-x</id>
	<title>Byte-Welt Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=L-ectron-x"/>
	<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php/Spezial:Beitr%C3%A4ge/L-ectron-x"/>
	<updated>2026-07-07T15:15:19Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Byte-Welt&amp;diff=9554</id>
		<title>Byte-Welt</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Byte-Welt&amp;diff=9554"/>
		<updated>2026-07-01T14:47:13Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Byte-Welt&#039;&#039;&#039; ging aus einem älteren Projekt hervor, das von einigen jungen Programmierern 2004 nach wachsender Unzufriedenheit mit ihrem Lieblings-Java-Forum entstand. Damals hieß das Projekt noch &#039;&#039;&#039;Coding Community&#039;&#039;&#039; und beschäftigte sich hauptsächlich mit der Programmierung in Java. Auch ein kleines Forum und einen Entwickler-Chat gab es damals schon, beide aber wenig besucht. Einige Programmierer-Freunde verließen das Projekt, die Community schrumpfte. Im Juni 2006 wurde von [[Benutzer:EagleEye|EagleEye]] und einer Hand voll Programmierer-Freunde ein Neuanfang vereinbart. Der etwas sperrige Name wurde verworfen und Byte-Welt wurde gegründet.&lt;br /&gt;
&lt;br /&gt;
==Entstehung==&lt;br /&gt;
Bei Problemen im Programmieralltag holte man sich zu deren Lösung Ideen und Anregungen aus Internet-Foren, Wikis, Chats etc. - heute häufig auch von KI-Assistenten. Die meisten Programmierer beherrschen mehrere Programmiersprachen, um ihre tägliche Arbeit bewältigen zu können und melden sich daher bei mehreren spezialisierten Communities an, die sich mit jeweils einer Programmiersprache beschäftigen.&lt;br /&gt;
&lt;br /&gt;
Die Idee war daher, ein Projekt zu schaffen, in dem sich Programmierer der wichtigsten Programmiersprachen unter einem Dach und mit nur einem Benutzerkonto über verschiedenste Web-Dienste austauschen können. Dieses Wiki ist demnach nur ein Teil von &#039;&#039;byte-welt.net&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Byte-Welt selbst versammelte IT-Experten vieler Fachrichtungen, und konnte so ein breites Spektrum abdecken. Die bis dato aktive Community bestand aus Schülern, Studenten, Fachinformatikern und Diplom-Ingenieuren. Viele Hobby-Entwickler fanden auch den Weg zu uns.&lt;br /&gt;
&lt;br /&gt;
Heute ist Byte-Welt zum großen Teil ein Archiv für IT-Wissen und damit ein Teil deutscher IT-Geschichte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Inhalte==&lt;br /&gt;
&#039;&#039;byte-welt.net&#039;&#039; bestand aus einem Forum (einem heute noch aktiven Entwickler- [https://discordapp.com/invite/S4P8RAD Chat], diesem [http://wiki.byte-welt.de Wiki], der nicht mehr aktiven Java Link Base und mehreren weiteren Projekten wie bspw. das heute noch verfügbare [https://java-blog-buch.bytes4fun.de/ Java Blog Buch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Byte-Welt}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[[Byte-Welt_Wiki:Impressum|Impressum]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Byte-Welt]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9553</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9553"/>
		<updated>2026-07-01T14:45:46Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Byte-Welt}}&lt;br /&gt;
&amp;lt;!-- Willkommen --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Willkommen im Byte-Welt-Wiki&amp;lt;/h2&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:100%; border-top:0px; padding:0.75em; text-align:left&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Was das Byte-Welt-Wiki heute ist&amp;lt;/h3&amp;gt;&lt;br /&gt;
Das Byte-Welt-Wiki ist ein Archiv und Lernprojekt im Themenbereich Hardware und Programmierung. Viele Inhalte, wie Best Practice, Codestücke oder Tutorials stammen aus der aktiven Zeit der Byte‑Welt‑Community, die über Jahre ein Forum, einen Chat, dieses Wiki und das Java-Blog-Buch betrieb. Zahlreiche Beiträge wurden damals gemeinschaftlich erstellt und gepflegt – ein Stück deutschsprachiger IT‑Geschichte, die hier bewusst erhalten bleibt.&lt;br /&gt;
&amp;lt;h3&amp;gt;Wie das Projekt weitergeführt wird&amp;lt;/h3&amp;gt;&lt;br /&gt;
Das Byte-Welt-Wiki wird schrittweise modernisiert. Die Weiterentwicklung erfolgt bewusst langsam und ohne Zeitdruck. Monat für Monat kommen neue Themen hinzu oder bestehende Inhalte werden ergänzt.&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Autor des Monats --&amp;gt;&amp;lt;!-- Tipp --&amp;gt;&amp;lt;!-- Newsflash --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;!--&amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; background-color:#2C4051&amp;quot;&amp;gt;Autor/-in des Monats&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Tipp&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Newsflash&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!--&amp;lt;td style=&amp;quot;border-left:1px solid #2C4051; border-right:1px solid #2C4051; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Pokal.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;I&#039;&#039;&#039;n diesem Monat wurden folgende Autoren für gute Arbeit im Wiki ausgezeichnet:&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Gluehbirne.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt; &#039;&#039;&#039;F&#039;&#039;&#039;ür das schnelle Navigieren im Wiki bitte das [[Inhalt|Inhaltsverzeichnis]] nutzen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Newsflash.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;News aus dem Byte-Welt Themenbereich&#039;&#039;&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:20px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{{Neuer Artikel}}&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:33%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;ul&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Zum Jahresanfang stellte Byte-Welt den Forum-Betrieb ein!&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Apache NetBenas 30 erschienen&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Eclipse 2026-06 erschienen&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Oracle veröffentlicht Java 26 und das Update für Java SE 8 Update 491&amp;lt;/li&amp;gt;&lt;br /&gt;
       &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zufallsartikeln Nr1 + 2 --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Kategorien&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:48%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;tagcloud&amp;gt;&lt;br /&gt;
         min_count=5&lt;br /&gt;
       &amp;lt;/tagcloud&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Enum_(Java)&amp;diff=9552</id>
		<title>Enum (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Enum_(Java)&amp;diff=9552"/>
		<updated>2026-07-01T14:41:56Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Schlüsselwort &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; werden in Java Aufzählungen realisiert.&lt;br /&gt;
&lt;br /&gt;
Für diesen Artikel greifen wir auf eine Publikation in unserem [https://java-blog-buch.bytes4fun.de/0605-enumerations/ Java-Blog-Buch] zurück.&lt;br /&gt;
&lt;br /&gt;
*[https://java-blog-buch.bytes4fun.de/0605-enumerations/ Enumaration]&lt;br /&gt;
&lt;br /&gt;
=enum durchlaufen=&lt;br /&gt;
Um durch die Werte einer Enumeration zu iterieren ist folgender Code praktikabel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public enum Day {&lt;br /&gt;
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void iterate() {&lt;br /&gt;
   for (Day day : Day.values()) {&lt;br /&gt;
      System.out.println(day);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Enum_(Java)&amp;diff=9551</id>
		<title>Enum (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Enum_(Java)&amp;diff=9551"/>
		<updated>2026-07-01T14:40:50Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Schlüsselwort &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; werden in Java Aufzählungen realisiert.&lt;br /&gt;
&lt;br /&gt;
Für diesen Artikel greifen wir auf eine Publikation in unserem [https://java-blog-buch.bytes4fun.de/0605-enumerations/ Java-Blog-Buch] zurück.&lt;br /&gt;
&lt;br /&gt;
*[https://www.java-blog-buch.de/0605-enumerations/ Enumaration]&lt;br /&gt;
&lt;br /&gt;
=enum durchlaufen=&lt;br /&gt;
Um durch die Werte einer Enumeration zu iterieren ist folgender Code praktikabel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public enum Day {&lt;br /&gt;
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void iterate() {&lt;br /&gt;
   for (Day day : Day.values()) {&lt;br /&gt;
      System.out.println(day);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Weiterführende Links=&lt;br /&gt;
*[https://forum.byte-welt.net/t/wofuer-verwendet-ihr-enums/21046 Wofür verwendet ihr enums - wann einsetzen und wann nicht? - Byte-Welt-Forum]&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Java-Programm_nur_einmal_starten&amp;diff=9550</id>
		<title>Java-Programm nur einmal starten</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Java-Programm_nur_einmal_starten&amp;diff=9550"/>
		<updated>2026-07-01T14:39:34Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Tutorials (Java)]]&lt;br /&gt;
&lt;br /&gt;
=Einleitung=&lt;br /&gt;
Unter bestimmten Umständen kann es gewünscht sein, dass nur eine aktive Instanz eines Programms auf einem Rechner ausgeführt wird. Sollte das Programm ein weiteres Mal aufgerufen werden, soll die gerade aktive, (unsichtbare) Instanz des Programms in den Fokus des Benutzers geholt werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es stellt sich also die Frage: Wie kann überprüft werden, ob ein Programm schon läuft und anschließend ein weiterer Start verhindert werden?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Jedes Java-Programm wird in einer eigenen virtuellen Maschine (VM) gestartet, somit sind sie räumlich voneinander getrennt.&lt;br /&gt;
Im Web sind einige interessante Vorschläge zu finden, die beschreiben, wie man ein Java-Programm so programmiert, dass nur eine aktive Instanz im Arbeitsspeicher zugelassen wird, man also ein Java-Programm nur &amp;quot;einmal&amp;quot; ausführen kann.&lt;br /&gt;
&lt;br /&gt;
Möglichkeiten zur Lösung gibt es. Hier einige Ansätze:&lt;br /&gt;
* eine Lock-Datei&lt;br /&gt;
* einen Port sperren&lt;br /&gt;
* Client/Server-Anwendung&lt;br /&gt;
* eine Kombination aus all dem.&lt;br /&gt;
&lt;br /&gt;
Jede der Lösungen bietet Vorteile, wie auch Nachteile in der Praxis. In unserem Artikel [https://java-blog-buch.bytes4fun.de/d-java-anwendung-nur-einmal-ausfuehren/ Java-Anwendung nur einmal ausführen - Java-Blog-Buch] wurden die wichtigsten beschrieben.&lt;br /&gt;
&lt;br /&gt;
Demnach ist einer der größten Nachteile beim Einsatz von Lock-Dateien, dass man mit einer bereits gestarteten Anwendung nicht kommunizieren kann. Man kann die laufende Instanz bspw. nicht sichtbar machen, wenn sie gerade verdeckt ist. Das Gleiche trifft auf die Port-Sperrung zu. Im schlimmsten Fall passiert also gar nichts und/oder der Bildschirm bleibt unverändert, wenn man versucht, das gewünschte Programm ein weiteres Mal zu starten.&lt;br /&gt;
&lt;br /&gt;
Client-/Server-Anwendungen sind meist etwas komplexer, können aber derartige Probleme lösen.&lt;br /&gt;
&lt;br /&gt;
Eine bisher nicht besprochene Lösung wird im Folgenden beschrieben. Eine Lösung mit Hilfe der seit dem [[JDK]] 1.0 mitgelieferten Java-Bibliothek für verteilte Anwendungen - [[RMI]].&lt;br /&gt;
Sie besticht durch ihre Einfachheit gegenüber einer Client-/Server-Anwendung und einem Maximum an Vorteilen.&lt;br /&gt;
&lt;br /&gt;
=RMI - eine Einführung=&lt;br /&gt;
Um die in diesem Artikel besprochene Lösung zu programmieren, werden keine RMI-Kenntnisse vorausgesetzt, sie werden aber beim Verstehen des Codes und der Vorgehensweise helfen, so dass später die Implementierung in eigenen Programmen leichter fällt.&lt;br /&gt;
&lt;br /&gt;
Daher empfehlen wir, bevor wir weiter machen, den kurz und knapp gehaltenen Einführungsartikel ([[RMI minimal]]) zu studieren.&lt;br /&gt;
&lt;br /&gt;
=Schritt für Schritt zum Start-Limit=&lt;br /&gt;
Beginnen wir also nun, eine kleine Demo-Anwendung zu programmieren, mit dem Ziel, dass diese nur einmal gestartet werden kann. Weitere Starts werden nur die bereits aktive Anwendung in den Fokus des Benutzers holen.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man es genau nimmt, wird zwar eine weitere Instanz der Anwendung gestartet werden können, jedoch nach der Kommunikation mit der bereits laufenden Instanz sofort wieder beendet.&lt;br /&gt;
&lt;br /&gt;
==Die Ausgangslage - ein einfaches Fenster==&lt;br /&gt;
Zunächst möchten wir eine einfache Anwendung erzeugen, die wir dann im weiteren Schritt mit den gewünschten Funktionen ausbauen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DemoFrame ist der Einstiegspunkt in die Anwendung.&lt;br /&gt;
 * Hier werden wichtige Prüfungen angestoßen und die Benutzeroberfläche zusammengebaut.&lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class DemoFrame {&lt;br /&gt;
   private JFrame frame;&lt;br /&gt;
&lt;br /&gt;
   public DemoFrame() {&lt;br /&gt;
      frame = new JFrame(&amp;quot;Demo-Frame&amp;quot;);&lt;br /&gt;
      frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);&lt;br /&gt;
      frame.addWindowListener(new WindowAdapter() {&lt;br /&gt;
         public void windowClosing(WindowEvent e) {&lt;br /&gt;
            exit();&lt;br /&gt;
         }&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      /* Position für später einzufügenden Code aus&lt;br /&gt;
         Kapitel Zusammenspiel Server und Client */&lt;br /&gt;
&lt;br /&gt;
      frame.add(createMainPanel());&lt;br /&gt;
      frame.pack();&lt;br /&gt;
      frame.setLocationByPlatform(true);&lt;br /&gt;
      frame.setVisible(true);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private JPanel createMainPanel() {&lt;br /&gt;
      JPanel panel = new JPanel(new BorderLayout());&lt;br /&gt;
      panel.setPreferredSize(new Dimension(600, 400));&lt;br /&gt;
      return panel;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private void exit() {&lt;br /&gt;
      int option = JOptionPane.showConfirmDialog(&lt;br /&gt;
            frame,&lt;br /&gt;
            &amp;quot;Möchten Sie die Anwendung wirklich beenden?&amp;quot;,&lt;br /&gt;
            getAppTitle() + &amp;quot; - Beenden bestätigen&amp;quot;,&lt;br /&gt;
            JOptionPane.YES_NO_OPTION,&lt;br /&gt;
            JOptionPane.QUESTION_MESSAGE);&lt;br /&gt;
&lt;br /&gt;
      if (option == JOptionPane.YES_OPTION) {&lt;br /&gt;
&lt;br /&gt;
         /* Position für später einzufügenden Code aus&lt;br /&gt;
            Kapitel Zusammenspiel Server und Client */&lt;br /&gt;
&lt;br /&gt;
         frame.dispose();&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      try {&lt;br /&gt;
	 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());&lt;br /&gt;
      }&lt;br /&gt;
      catch(Exception ex) {&lt;br /&gt;
	 System.out.println(ex);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
         public void run() {&lt;br /&gt;
            new DemoFrame();&lt;br /&gt;
         }&lt;br /&gt;
      });&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der Code der Anwendung ist schon für den nächsten Schritt vorbereitet, so dass in den folgenden Schritten weniger verwirrende Code-Änderungen durchgeführt werden müssen. [[Datei:Demo-Frame_01.png|300px|thumb|left|Die Ausgabe: ein leerer JFrame]]&lt;br /&gt;
&lt;br /&gt;
Wir erzeugen also einen leeren {{JAPI|JFrame}}.&lt;br /&gt;
&lt;br /&gt;
In Zeile 15 schalten wir das Standardverhalten des JFrames beim Beenden (Klick auf den Schließen-Button des Fensters) aus. Damit der JFrame geschlossen werden kann, implementieren wir anschließend (Zeile 16 bis Zeile 20) einen {{JAPI|WindowListener}}, der für die Beendigung des Programms sorgt. Man könnte das auch auch einfacher lösen, in dem man in Zeile 15 &amp;lt;code&amp;gt;frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);&amp;lt;/code&amp;gt; schreiben würde. Aber wie erwähnt wird bereits ein später benötigtes Verhalten hier implementiert.&lt;br /&gt;
&lt;br /&gt;
In Zeile 25 fügen wir das in Zeile 31 bis Zeile 35 definierte {{JAPI|JPanel}} in dem JFrame ein. Das JPanel sorgt hier erst mal nur für die Größe des JFrames bei der Ausgabe auf dem Bildschirm. Später werden wir noch Code für das JPanel hinzufügen, der die Demo anschaulicher machen wird.&lt;br /&gt;
&lt;br /&gt;
In Zeile 27 legen wir fest, dass die JVM unser Fenster dort auf dem Bildschirm positionieren wird, wie es den Regeln des Host-Systems zur Ausgabe von neuen Fenstern auf dem Bildschirm entspricht.&lt;br /&gt;
&lt;br /&gt;
Die exit()-Methode schließt unsere Anwendung, wenn der Benutzer auf den entsprechenden Fenster-Button klickt.&lt;br /&gt;
&lt;br /&gt;
==Vorüberlegung==&lt;br /&gt;
Gut, eine einfache GUI wurde aufgebaut. Später werden wir noch einige Objekte darin ablegen/einfügen, um eine sinnvollere Anwendung zu erhalten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folgende Frage müssen wir uns nun beantworten: Wie muss sich ein Programm verhalten, um zu ermitteln, ob ein gleichartiges Java-Programm bereits ausgeführt wird?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Wird das Programm das &amp;quot;erste&amp;quot; Mal gestartet, muss es zunächst nach einer weiteren aktiven gleichartigen Anwendung &amp;quot;suchen&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Sollte es keine aktive gleichartige Anwendung geben, ist die soeben gestartete Instanz die erste und wird dem Benutzer auf dem Bildschirm angezeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Ist allerdings bereits eine gleichartige Anwendung aktiv, muss sich die zuletzt gestartete Instanz wieder beenden und die möglicherweise gerade nicht sichtbare erste Instanz in den Vordergrund des Bildschirms gebracht werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Punkt 1&#039;&#039;&#039; klingt etwas nach dem klassischen Verhalten eines Clients. Er sucht nach einem Server, um seine Dienste zu nutzen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Punkt 2&#039;&#039;&#039; klingt nach dem Verhalten eines Servers. Er wird gestartet und bietet Dienste für Clients an, die sich mit ihm verbinden.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Punkt 3&#039;&#039;&#039; klingt nach einer Interaktion von Client und Server. Der Client hat einen Server &amp;quot;gefunden&amp;quot;, nutzt einen Dienst (&#039;&#039;zeige die Benutzeroberfläche an&#039;&#039;) und beendet die Verbindung bzw. sich selbst.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, wir benötigen in unserem Programm das Verhalten eines Servers und eines Clients.&lt;br /&gt;
&lt;br /&gt;
Und genau dieses Verhalten werden wir nun schrittweise mit Hilfe von [[RMI]] implementieren.&lt;br /&gt;
&lt;br /&gt;
==Definition des Remote-Interfaces==&lt;br /&gt;
Hier nun also die Definition unseres Remote-Interfaces, welches alle Methodenrümpfe enthält, die unser Programm für das gewünschte Verhalten benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.rmi.Remote;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Das Interface beschreibt die benötigten Methoden, die von einem RemoteTask implementiert werden müssen.&lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public interface RemoteTask extends Remote {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Wird prüfen, ob bereits ein RMI-Server online ist.&lt;br /&gt;
     * Der RMI-Server ist online, wenn bspw. der RMI-Port (1099) belegt ist, ein Remote-Objekt &lt;br /&gt;
     * in der RMI-Registry gespeichert wurde und eine Methode dieses Objektes aufgerufen werden kann.&lt;br /&gt;
     * @return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, wenn festgestellt werden konnte, dass der RMI-Server bereits online ist,&lt;br /&gt;
     * sonst &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
     * @throws java.rmi.RemoteException&lt;br /&gt;
     */&lt;br /&gt;
    boolean isRunningAnotherInstance() throws RemoteException;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Wird die Benutzeroberfläche der bereits laufenden Programminstanz anzeigen.&lt;br /&gt;
     * @throws java.rmi.RemoteException&lt;br /&gt;
     */&lt;br /&gt;
    void showRunningInstance() throws RemoteException;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die erste Methode wird also zur Ermittlung eines laufenden Servers benötigt, die Zweite, um die laufende (erste) Instanz sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Remote-Funktionen==&lt;br /&gt;
Die entsprechende Ausprogrammierung (Implementierung), der von unserem Remote-Interface vorgegebenen Methoden, sieht für unsere Anwendung nun so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * RemotTaskImpl enthält die Aufgaben des RMI-Servers in Form von ausprogrammierten Methoden des Remote-Interfaces.&lt;br /&gt;
 */&lt;br /&gt;
public class RemoteTaskImpl implements RemoteTask {&lt;br /&gt;
    private final Frame frame;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Der RMI-Server kennt die laufende (erste) Anwendung und übergibt hier die Fenster-Instanz,&lt;br /&gt;
     * die in den Fokus des Benutzers geholt werden soll, wenn eine weitere gleichartige Anwendung&lt;br /&gt;
     * gestartet werden sollte.&lt;br /&gt;
     * @param frame Die Benutzeroberfläche der &amp;quot;ersten&amp;quot; Instanz.&lt;br /&gt;
     */&lt;br /&gt;
    public RemoteTaskImpl(Frame frame) {&lt;br /&gt;
        this.frame = frame;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Diese Methode kann vom Client nur aufgerufen werden, wenn ein RMI-Server aktiv ist&lt;br /&gt;
     * und von diesem das entsprechende Remote-Objekt bereitgestellt wurde.&lt;br /&gt;
     * Ist diese Methode aufrufbar, heißt das für den Client, dass bereits eine gleichartige&lt;br /&gt;
     * Anwendung aktiv ist.&lt;br /&gt;
     * @see RemoteTask&lt;br /&gt;
     * @return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; wenn bereits eine andere, gleichartige Instanz aktiv ist.&lt;br /&gt;
     * @throws RemoteException &lt;br /&gt;
     */&lt;br /&gt;
    @Override&lt;br /&gt;
    public boolean isRunningAnotherInstance() throws RemoteException {&lt;br /&gt;
        System.out.println(&amp;quot;A second instance of &amp;quot; + frame.getTitle() + &amp;quot; was started.&amp;quot;);&lt;br /&gt;
        return true;&lt;br /&gt;
    }  &lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Diese Methode wird vom RMI-Client aufgerufen, um dem RMI-Server mitzuteilen, dass er&lt;br /&gt;
     * die bereits laufende Instanz in den Fokus des Benutzers holen soll.&lt;br /&gt;
     * @see RemoteTask&lt;br /&gt;
     * @throws RemoteException &lt;br /&gt;
     */&lt;br /&gt;
    @Override&lt;br /&gt;
    public void showRunningInstance() throws RemoteException {&lt;br /&gt;
        System.out.println(&amp;quot;The instance of &amp;quot; + frame.getTitle() + &amp;quot; that is already running is displayed.&amp;quot;);&lt;br /&gt;
        frame.pack();&lt;br /&gt;
        frame.setLocationRelativeTo(null);&lt;br /&gt;
        frame.setVisible(true);&lt;br /&gt;
        frame.toFront();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementieren des Servers==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.rmi.AlreadyBoundException;&lt;br /&gt;
import java.rmi.NoSuchObjectException;&lt;br /&gt;
import java.rmi.NotBoundException;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
import java.rmi.registry.LocateRegistry;&lt;br /&gt;
import java.rmi.registry.Registry;&lt;br /&gt;
import java.rmi.server.UnicastRemoteObject;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Server ist der RMI-Server, der Remote-Objekte in der RMI-Registry speichert&lt;br /&gt;
 * und Anfragen von Clients beantwortet.&lt;br /&gt;
 * Die Klasse erwartet mindestens die Instanz der Fenster-Klasse, das als Single-Fenster behandelt werden soll.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class Server {&lt;br /&gt;
    private RemoteTaskImpl task;&lt;br /&gt;
    private String bindName;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Erzeugt einen RMI-Server.&lt;br /&gt;
     * Die übergebene Fenster-Instanz wird bei Bedarf sichtbar gemacht.&lt;br /&gt;
     * @param frame Die Instanz der Fenster-Klasse, die sichtbar gemacht werden soll.&lt;br /&gt;
     * @throws RemoteException&lt;br /&gt;
     * @throws AlreadyBoundException &lt;br /&gt;
     */&lt;br /&gt;
    public Server(Frame frame) throws RemoteException, AlreadyBoundException {&lt;br /&gt;
        this(frame, Registry.REGISTRY_PORT);&lt;br /&gt;
    }  &lt;br /&gt;
&lt;br /&gt;
    public Server(Frame frame, int port) throws RemoteException, AlreadyBoundException {&lt;br /&gt;
        this.bindName = frame.getTitle();&lt;br /&gt;
        LocateRegistry.createRegistry(port);&lt;br /&gt;
        System.out.println(bindName+&amp;quot; listening on port &amp;quot; + port + &amp;quot;...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        task = new RemoteTaskImpl(frame);&lt;br /&gt;
        RemoteTask stub = (RemoteTask) UnicastRemoteObject.exportObject(this.task, 0);&lt;br /&gt;
&lt;br /&gt;
        Registry registry = LocateRegistry.getRegistry();&lt;br /&gt;
        registry.bind(this.bindName, stub);&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Remote object bound to RMI registry.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Entfernt das Remote-Objekt aus der RMI-Registry.&lt;br /&gt;
     * Der RMI-Server wird damit heruntergefahren.&lt;br /&gt;
     * @throws NoSuchObjectException &lt;br /&gt;
     * @throws java.rmi.NotBoundException &lt;br /&gt;
     */&lt;br /&gt;
    public void shutDown() throws NoSuchObjectException, RemoteException, NotBoundException {&lt;br /&gt;
        UnicastRemoteObject.unexportObject(this.task, true);&lt;br /&gt;
        Registry registry = LocateRegistry.getRegistry();&lt;br /&gt;
        registry.unbind(this.bindName);&lt;br /&gt;
        System.out.println(&amp;quot;All services have ended.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    public static void main(String[] args) throws RemoteException, AlreadyBoundException {&lt;br /&gt;
        Server server = server = new Server(&amp;quot;rmi://localhost/SingleWindow&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementieren des Clients==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.rmi.NotBoundException;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
import java.rmi.registry.LocateRegistry;&lt;br /&gt;
import java.rmi.registry.Registry;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
import java.util.logging.Logger;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Client ist der RMI-Client, der nach passenden Remote-Objekten in der RMI-Registry sucht&lt;br /&gt;
 * und die bereit gestellten Methoden für Anfragen an den Server aufruft.&lt;br /&gt;
 * Die Klasse erwartet mindestens die URI (Adresse), unter der nach Remote-Objekten gesucht werden soll.&lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class Client {&lt;br /&gt;
&lt;br /&gt;
    private RemoteTask task;&lt;br /&gt;
&lt;br /&gt;
    public Client(String taskName) throws RemoteException {&lt;br /&gt;
        this(taskName, Registry.REGISTRY_PORT);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public Client(String taskName, int port) throws RemoteException {&lt;br /&gt;
        try {&lt;br /&gt;
            Registry registry = LocateRegistry.getRegistry(port);&lt;br /&gt;
            task = (RemoteTask) registry.lookup(taskName);&lt;br /&gt;
        } catch (RemoteException | NotBoundException ex) {&lt;br /&gt;
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Ermittelt, ob bereits ein anderer RMI-Server online ist.&lt;br /&gt;
     *&lt;br /&gt;
     * @return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, wenn festgestellt werden konnte, dass bereits&lt;br /&gt;
     * eine RMIRegistry bzw. ein RMI-Server gestartet wurde, sonst &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
     * @throws RemoteException&lt;br /&gt;
     */&lt;br /&gt;
    public boolean isRunningAnotherInstance() throws RemoteException {&lt;br /&gt;
        return task.isRunningAnotherInstance();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void showRunningInstance() throws RemoteException {&lt;br /&gt;
        task.showRunningInstance();&lt;br /&gt;
    }    &lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    public static void main(String[] args) throws RemoteException {&lt;br /&gt;
        Client client = new Client(&amp;quot;rmi://localhost/SingleWindow&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zusammenspiel Server und Client==&lt;br /&gt;
Nehmen wir uns an dieser Stelle noch mal die eingangs geschriebene Fenster-Klasse vor.&lt;br /&gt;
&lt;br /&gt;
In die dort markierte Position im Code fügen wir folgendes Fragment ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
      try {&lt;br /&gt;
         System.out.println(frame.getTitle() + &amp;quot; is starting... &amp;quot;);&lt;br /&gt;
         Server server = new Server(frame, port);&lt;br /&gt;
      } catch (RemoteException | AlreadyBoundException ex) {&lt;br /&gt;
         System.err.out(ex);&lt;br /&gt;
         try {&lt;br /&gt;
            Client client = new Client(frame.getTitle(), port);&lt;br /&gt;
            boolean isRunning = client.isRunningAnotherInstance();&lt;br /&gt;
            System.out.println(&amp;quot;The second instance of &amp;quot; + frame.getTitle() + &amp;quot; is ended.&amp;quot;);&lt;br /&gt;
            if (isRunning) {&lt;br /&gt;
               client.showRunningInstance();&lt;br /&gt;
               System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
         } catch (RemoteException re) {&lt;br /&gt;
            System.err.out(re);&lt;br /&gt;
            JOptionPane.showMessageDialog(null,&lt;br /&gt;
                    frame.getTitle() + &amp;quot; kann nicht gestartet werden, weil der Port &amp;quot; + port + &amp;quot; bereits von einer anderen Anwendung benutzt wird!&amp;quot;,&lt;br /&gt;
                    re.getClass().getName(),&lt;br /&gt;
                    JOptionPane.ERROR_MESSAGE);&lt;br /&gt;
            System.out.println(frame.getTitle() + &amp;quot; is ended.&amp;quot;);&lt;br /&gt;
            System.exit(0);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem ändern wir noch die private Methode zum Beenden unseres Programms. In die &#039;&#039;&#039;exit()-Methode&#039;&#039;&#039; setzen wir folgendes Fragment an die markierte Position:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
        try {&lt;br /&gt;
           server.shutDown();&lt;br /&gt;
           server = null;&lt;br /&gt;
           System.out.println(frame.getTitle() + &amp;quot; is down.&amp;quot;);&lt;br /&gt;
        } catch (RemoteException | NotBoundException ex) {&lt;br /&gt;
           System.err.out(ex);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was passiert hier nun? Zunächst erzeugen wir ein Server-Objekt. Den Code dazu haben wir weiter oben bereits fertig gestellt. Der Server erwartet die Fenster-Instanz &#039;&#039;&#039;dieses&#039;&#039;&#039; gerade gestarteten Programms, sowie den Port (standardmäßig 1099), an dem er auf nachfolgende Programm-Instanzen warten soll. Aus der Fenster-Instanz entnimmt der Server den Titel des Frames und benutzt ihn zur Registrierung des Remote-Objektes.&lt;br /&gt;
&lt;br /&gt;
Ist der Port, an dem der Server lauschen soll allerdings bereits belegt, &#039;&#039;kann&#039;&#039; das bedeuten, dass der Port von einer früher gestarteten Programm-Instanz belegt wurde. Daher wird eine Fehlermeldung in die Console geschrieben und eine Instanz eines Clients angelegt. In der RMI-Fehlermeldung wird u.a. angegeben, dass der Port bereits gebunden wurde. Das ist aber in diesem Fall kein Problem. Wir konnten damit rechnen, dass bereits ein Programm dieses (unseres) Typs früher gestartet wurde.&lt;br /&gt;
&lt;br /&gt;
Der Client erwartet den Titel der Fenster-Klasse, den er zum Vergleich an den Server übergibt. Wurde ein Remote-Objekt unter dem Namen unserer Fenster-KLasse in der RMIRegistry abgelegt, handelt es sich dabei um ein von uns früher gestartes Programm. Der Client fragt nun beim Server nach, ob es bereits ein registriertes Remote-Objekt gibt. Eine Ausgabe zum Ergebnis dieser Anfrage wird in die Console geschrieben.&lt;br /&gt;
&lt;br /&gt;
Meldet der Server, dass es eine laufende Instanz unserer Fenster-Klasse gibt, bittet der Client den Server, diese Instanz im Vordergrund des Bildschirms anzuzeigen. Danach beendet sich der Client.&lt;br /&gt;
&lt;br /&gt;
In die exit()-Methode setzen wir an der markierten Position das 2. Fragement. Damit wird der Server vor dem Beenden herunter gefahren. Er löst die Port-Bindung und löscht das Remote-Objekt aus der RMIRegistry.&lt;br /&gt;
&lt;br /&gt;
Das war&#039;s. Nun testen wir. Also Code kompilieren und Anwendung starten.&lt;br /&gt;
&lt;br /&gt;
==Testen der Anwendung==&lt;br /&gt;
{{In Arbeit}}&lt;br /&gt;
&lt;br /&gt;
==Ausbau der Anwendung==&lt;br /&gt;
&lt;br /&gt;
=Problem mit dieser Lösung=&lt;br /&gt;
Wie wir gesehen haben, eröffnen sich Möglichkeiten für Probleme bei der Anwendung von RMI in unserer Anwendung. &lt;br /&gt;
&lt;br /&gt;
*Zunächst kann man nicht vorhersehen, ob der von uns verwendete Port nicht schon von einer anderen Software belegt wurde. In diesem Fall bekommen wir nichts von unserem Programm zu sehen. Aber auch, wenn wir nur den RMI-Port benutzen, lauern hier weitere Stolperdrähte.&lt;br /&gt;
*Was passiert eigentlich, wenn wir mehrere Programme geschrieben haben, die alle diese nette Funktion des &amp;quot;Nur-einmal-startens&amp;quot; unterstützen? Man könnte zwar für jedes unserer Programme einen eigenen/anderen Port verwenden. Aber da gibt es sicher auch Grenzen.&lt;br /&gt;
&lt;br /&gt;
==Lösung des Problems==&lt;br /&gt;
{{In Arbeit}}&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Java-Programme_durch_PlugIns_erweitern&amp;diff=9549</id>
		<title>Java-Programme durch PlugIns erweitern</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Java-Programme_durch_PlugIns_erweitern&amp;diff=9549"/>
		<updated>2026-07-01T14:38:32Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=center border=0 cellpadding=3 cellspacing=3 style=&amp;quot;border: 1px solid #E0E0E0; background-color: #F8F8F8&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;font-size: 90%&amp;quot; | [[Bild:Unvollstaendig.png]]  Dieser Artikel ist unvollständig. Hilf mit ihn zu verbessern, erweitere ihn oder beteilige dich an der Diskussion.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Damit [[Programm]]e leicht um neue Teile erweitert werden können, ist es hilfreich und komfortabel, diese mit einer [[Plugin]]-[[Schnittstelle]] auszustatten.&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Als Voraussetzung für die Verwendung von Plugins sollten verschiedene [[Klasse]]n und [[Interface (Java) | Interface]]s vorhanden sein:&lt;br /&gt;
# &#039;&#039;&#039;Plugin-Interface&#039;&#039;&#039; - das die Plugins implementieren müssen. Hiermit wird festgelegt welche Funktionen das Plugin der Anwendung anbieten muss.&lt;br /&gt;
# &#039;&#039;&#039;Anwendung-Interface&#039;&#039;&#039; - das die Schnittstelle von den Plugins zur [[Anwendung]] darstellt, hiermit kann kontrolliert werden, was die Anwendungen dürfen und was sie sehen.&lt;br /&gt;
# &#039;&#039;&#039;Manager&#039;&#039;&#039; - gesonderte Klasse für das Laden, Starten und Beenden der Plugins.&lt;br /&gt;
&lt;br /&gt;
==Die Interfaces==&lt;br /&gt;
Das gesamte Plugin-System könnte auch ohne Interfaces geschrieben werden, jedoch ist dies unsicherer. Interfaces standardisieren durch vordefinierte Methoden die Entwicklung und Verwendung von Klassen, was innerhalb der Anwendung sicher stellt, dass nachgerüstete Klassen alle benötigten Methoden bereit stellen. Dadurch ist mit einfachen Mitteln eine gewisse Vielgestaltigkeit möglich.&lt;br /&gt;
&lt;br /&gt;
===Das Plugin-Interface===&lt;br /&gt;
Das Interface für die Plugins muss keine Methoden (Markerinterface), kann aber auch beliebig viele definieren. Es hat sich bewärt, dass das Plugin-Interface mindestens zwei Methoden besitzt &#039;&#039;&#039;start()&#039;&#039;&#039; und &#039;&#039;&#039;stop()&#039;&#039;&#039;. Außerdem eine Methode um die Manager-Klasse zu setzen, sollte das Plugin auf irgendwelche Eigenschaften der Anwendung zugreifen können.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.byte_welt.wiki;&lt;br /&gt;
public interface PluginInterface{&lt;br /&gt;
  public boolean start();&lt;br /&gt;
  public boolean stop();&lt;br /&gt;
  public void setPluginManager(PluginManager manager);&lt;br /&gt;
  public void hello();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zusätzlich wurde das Interface um die Methode &#039;&#039;hello&#039;&#039; erweitert, somit kann das Plugin von der Anwendung auch benachrichtigt werden.&lt;br /&gt;
&lt;br /&gt;
===Das PluginManager-Interface===&lt;br /&gt;
Das Interface für den Pluginmanager bildet die Schnittstelle vom Plugin zur Anwendung. Hier werden alle Methoden aufgeführt die das Plugin aufrufen darf.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.byte_welt.wiki;&lt;br /&gt;
public interface PluginManager{&lt;br /&gt;
  public void openWindow(String msg);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Unser Plugin-Manager erlaubt nur das Öffnen eines Fensters mit einem String als Nachricht.&lt;br /&gt;
&lt;br /&gt;
==Implementierungen==&lt;br /&gt;
Durch die Interfaces muss für die Entwicklung des Plugins nur die [[Class-Datei | Class]]- oder [[Java-Dateien]] weiter gegeben  werden, die [[Implementierung]]en des PluginManagers dagegen nicht.&lt;br /&gt;
&lt;br /&gt;
===Hello-Plugin===&lt;br /&gt;
Unser Plugin soll beim Aufruf der &#039;&#039;hello()&#039;&#039;-Methode nur ein Fenster öffnen und dort &#039;&#039;Hallo&#039;&#039; ausgeben, daher fällt die Implementierung sehr einfach aus. Die &#039;&#039;start()&#039;&#039;- und &#039;&#039;stop()&#039;&#039;-Methoden werden garnicht benötigt, würde der Text aus einer [[Datenbank]] oder [[Datei]] gelesen werden könnte dies in der &#039;&#039;start&#039;&#039;-Methode erledigt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.byte_welt.wiki;&lt;br /&gt;
public class HelloPlugin implements PluginInterface{&lt;br /&gt;
  private PluginManager manager;&lt;br /&gt;
  public boolean start(){&lt;br /&gt;
    System.out.println(&amp;quot;ich starte&amp;quot;);&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  public boolean stop(){&lt;br /&gt;
    System.out.println(&amp;quot;ich stoppe&amp;quot;);&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  public void setPluginManager(PluginManager manager){&lt;br /&gt;
    this.manager = manager;&lt;br /&gt;
  }&lt;br /&gt;
  public void hello(){&lt;br /&gt;
    manager.openWindow(&amp;quot;hallo&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PluginManager===&lt;br /&gt;
Der Plugin-Manager kann für zwei Aufgaben verwendet werden. Er kann dem Plugin übergeben werden und zusätzlich kann er die Kontrolle der Plugins übernehmen. Unser Pluginmanager übernimmt beide Aufgaben, daher implementiert er das PluginManager-Interface. Zusätzlich werden die [[Methode|Methoden]] &#039;&#039;loadPlugin&#039;&#039;, &#039;&#039;start&#039;&#039; und &#039;&#039;stop&#039;&#039; implementiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.byte_welt.wiki;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.jar.*;&lt;br /&gt;
import java.net.*;&lt;br /&gt;
&lt;br /&gt;
public class PluginManagerImpl implements PluginManager{&lt;br /&gt;
&lt;br /&gt;
  private List&amp;lt;PluginInterface&amp;gt; loadedplugins = new ArrayLIst&amp;lt;&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
  public void start(){&lt;br /&gt;
  //..&lt;br /&gt;
  }&lt;br /&gt;
  public void stop(){&lt;br /&gt;
  //..&lt;br /&gt;
  }&lt;br /&gt;
  public void loadPlugin(File file){&lt;br /&gt;
  //..&lt;br /&gt;
  }&lt;br /&gt;
  public void openWindow(String msg){&lt;br /&gt;
  //..&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Start-Methode====&lt;br /&gt;
Die &#039;&#039;start&#039;&#039;-Methode wird aufgerufen, wenn die Anwendung gestartet wird und alle vorhandenen Plugins geladen werden sollen. Die Pfade zu den vorhandenen Plugins lassen sich z.B. extra speichern, oder es wird gesagt, alles was im Ordner &#039;&#039;&#039;plugins&#039;&#039;&#039; liegt gilt als Plugin. In unserem Fall wird gesagt, was im Ordner &#039;&#039;&#039;plugins&#039;&#039;&#039; liegt wird geladen, dafür wird nur die &#039;&#039;loadPlugin&#039;&#039;-Methode aufgerufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void start(){&lt;br /&gt;
  File[] files = new File(&amp;quot;plugins&amp;quot;).listFiles();&lt;br /&gt;
  for(File f : files)&lt;br /&gt;
    loadPlugin(f);&lt;br /&gt;
  for(PluginInterface pi : loadedplugins)&lt;br /&gt;
    pi.start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sind alle Plugins geladen, werden sie gestartet.&lt;br /&gt;
&lt;br /&gt;
====Stop-Methode====&lt;br /&gt;
Mit der &#039;&#039;stop&#039;&#039;-Methode wird den Plugins signalisiert, dass sie herunterfahren sollen. Dies ist der Fall, wenn z.B. das Programm beendet wird.&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void stop(){&lt;br /&gt;
  for(PluginInterface pi : loadedplugins)&lt;br /&gt;
    pi.stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LoadPlugin-Methode====&lt;br /&gt;
Um Plugins zu laden, gibt es zwei Ansätze. Zum einen gibt es die Möglichkeit [[Class-Datei|Class-Dateien]] aber auch [[JAR-Datei|JAR-Dateien]] zu laden.&lt;br /&gt;
&lt;br /&gt;
=====JAR-Dateien laden=====&lt;br /&gt;
Um ein Plugin aus einer JAR-Datei zu laden, muss deren Pfad und die [[Main-Class]] bekannt sein. Im Gegensatz zu einer normalen Anwendung ist die Main-Class bei einem Plugin die [[Klasse]], die das [[Interface]] für die Plugin-Schnittstelle implementiert. Es ist aber auch möglich, alle Klassen der JAR zu durchlaufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Erzeugen des JAR-Objekts durch die Eingabe der eingelesenen File in file&lt;br /&gt;
JarFile file = new JarFile(file);&lt;br /&gt;
//Laden der MANIFEST.MF&lt;br /&gt;
Manifest manifest = file.getManifest();&lt;br /&gt;
// auslesen der Attribute aus der Manifest&lt;br /&gt;
Attributes attrib = manifest.getMainAttributes();&lt;br /&gt;
// holen der Mainclass aus den Attributen&lt;br /&gt;
String main = attrib.getValue(Attributes.Name.MAIN_CLASS);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus dem [[JAR-Datei#MANIFEST.MF|Manifest]]-Objekt lassen sich jetzt beliebige Daten auslesen, jedoch werden hier nur die Informationen über die Main-Class benötigt. Mit diesen Daten lässt sich jetzt das Plugin laden, dazu wird ein neuer [[ClassLoader (Java) |ClassLoader]] erzeugt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Festlegen wo das PluginInterface liegt&lt;br /&gt;
String PLUGININTERFACECLASS_STRING = &amp;quot;net.byte_welt.wiki.PluginInterface&amp;quot;;&lt;br /&gt;
// Laden der Datei und Konvertierung von einer Datei, zu einer URI und dann zu einer URL&lt;br /&gt;
URL urlFile = file.toURI().toURL();&lt;br /&gt;
// Laden der Klasse durch den URLClassLoader&lt;br /&gt;
URLClassLoader classLoader = new URLClassLoader(new URL[] { urlFile });&lt;br /&gt;
// Class aus dem classLoader holen&lt;br /&gt;
Class cl = classLoader.loadClass(main);&lt;br /&gt;
// Interfaces aus der Klasse holen, die dort impementiert sind&lt;br /&gt;
Class[] interfaces = cl.getInterfaces();&lt;br /&gt;
// Durchlaufen durch die Interfaces der Klasse und nachsehen ob es das passende Plugin implementiert&lt;br /&gt;
boolean isplugin = false;&lt;br /&gt;
for(int y = 0; y &amp;lt; interfaces.length &amp;amp;&amp;amp; !isplugin; y++)&lt;br /&gt;
  if(interfaces[y].getName().equals(PLUGININTERFACECLASS_STRING))&lt;br /&gt;
    isplugin = true;&lt;br /&gt;
if(isplugin){&lt;br /&gt;
  PluginInterface plugin = (PluginInterface) cl.newInstance();&lt;br /&gt;
  loadedplugins.add(plugin);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Schließen von JarFile und ClassLoader um Fehler zu vermeiden&lt;br /&gt;
//jarFile.close();&lt;br /&gt;
classLoader.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Anschließend werden die Interfaces der Klasse betrachtet, ob es sich wirklich um ein Plugin handelt. Ist es ein Plugin wird eine neue Instanz erzeugt und diese abgespeichert.&lt;br /&gt;
&lt;br /&gt;
=====JAR-Dateien laden (Die Methode komplett)=====&lt;br /&gt;
Um ein Plugin aus einer JAR-Datei zu laden, muss deren Pfad und die [[Main-Class]] bekannt sein. Im Gegensatz zu einer normalen Anwendung ist die Main-Class bei einem Plugin die [[Klasse]], die das [[Interface]] für die Plugin-Schnittstelle implementiert. Es ist aber auch möglich, alle Klassen der JAR zu durchlaufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Festlegen wo das PluginInterface liegt&lt;br /&gt;
private static final String PLUGININTERFACECLASS_STRING = &amp;quot;net.byte_welt.wiki.PluginInterface&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		public void loadPlugin(File file) {&lt;br /&gt;
		try {&lt;br /&gt;
			// Erzeugen des JAR-Objekts durch die Eingabe der eingelesenen File in file&lt;br /&gt;
			JarFile jarFile = new JarFile(file);&lt;br /&gt;
			// Laden der MANIFEST.MF&lt;br /&gt;
			Manifest manifest = jarFile.getManifest();&lt;br /&gt;
			// Auslesen der Attribute aus der Manifest-Datei&lt;br /&gt;
			Attributes attrib = manifest.getMainAttributes();&lt;br /&gt;
			// Mainclass aus den Attributen laden&lt;br /&gt;
			String main = attrib.getValue(Attributes.Name.MAIN_CLASS);&lt;br /&gt;
			// Laden der Datei und Konvertierung von einer Datei, zu einer URI und dann zu&lt;br /&gt;
			// einer URL&lt;br /&gt;
			URL urlFile = file.toURI().toURL();&lt;br /&gt;
			// Laden der Klasse durch den URLClassLoader&lt;br /&gt;
			URLClassLoader classLoader = new URLClassLoader(new URL[] { urlFile });&lt;br /&gt;
			// Class aus dem classLoader holen&lt;br /&gt;
			Class cl = classLoader.loadClass(main);&lt;br /&gt;
			// Interfaces aus der Klasse holen, die dort impementiert sind&lt;br /&gt;
			Class[] interfaces = cl.getInterfaces();&lt;br /&gt;
			// Durchlaufen durch die Interfaces der Klasse und nachsehen ob es das&lt;br /&gt;
			// PluginInterface implementiert und somit ein Plugin ist&lt;br /&gt;
			boolean isplugin = false;&lt;br /&gt;
			for (int y = 0; y &amp;lt; interfaces.length &amp;amp;&amp;amp; !isplugin; y++)&lt;br /&gt;
				if (interfaces[y].getName().equals(PLUGININTERFACECLASS_STRING))&lt;br /&gt;
					isplugin = true;&lt;br /&gt;
			// Wenn es ein Plugin ist, dann lade die Datei bzw. das Plugin&lt;br /&gt;
			if (isplugin) {&lt;br /&gt;
				PluginInterface plugin = (PluginInterface) cl.newInstance();&lt;br /&gt;
			        // Zu den geladenen Plugin hinzufügen&lt;br /&gt;
				loadedplugins.add(plugin);&lt;br /&gt;
			}&lt;br /&gt;
			// Schließen von JarFile und ClassLoader um Fehler zu vermeiden&lt;br /&gt;
			jarFile.close();&lt;br /&gt;
			classLoader.close();&lt;br /&gt;
		} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException e) {&lt;br /&gt;
			System.out.println(&amp;quot;Plugin konnte nicht geladen werden!&amp;quot;);&lt;br /&gt;
			e.printStackTrace();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Class-Dateien laden=====&lt;br /&gt;
* wird nachgeliefert.&lt;br /&gt;
&lt;br /&gt;
===OpenWindow-Methode===&lt;br /&gt;
Die &#039;&#039;openWindow&#039;&#039;-Methode ist für die Interaktion mit den Plugins nötig, über diese Methode kann ein Fenster geöffnet werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void openWindow(String msg){&lt;br /&gt;
  javax.swing.JOptionPane.showMessageDialog(null, msg);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Weblinks=&lt;br /&gt;
*[https://java-blog-buch.bytes4fun.de/d-plugin-entwicklung-in-java/ Java Blog Buch: Plugin-Entwicklung in Java]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Tutorials (Java)]]&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=JAR-Datei&amp;diff=9548</id>
		<title>JAR-Datei</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=JAR-Datei&amp;diff=9548"/>
		<updated>2026-07-01T14:37:46Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine JAR-Datei (&#039;&#039;&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive&#039;&#039;), ist ein Archiv, welches auf dem [[ZIP]]-Format basiert. JAR-Dateien sind also identisch mit ZIP-Dateien, sind aber um einen Ordner &#039;&#039;META-INF&#039;&#039; erweitert, der dem Interpreter weitere Informationen zur JAR-Datei liefert.&lt;br /&gt;
&lt;br /&gt;
JAR-Dateien werden verwendet, um die einzelnen Dateien eines Projekts zusammen zufassen. So sind in einem Archiv häufig neben [[Class]]-Dateien auch multimediale Inhalte zu finden (Bilder, Sound etc.).&lt;br /&gt;
&lt;br /&gt;
Daher unterscheiden wir JAR-Dateien in Java-Anwendungen und Java-Biliotheken, die wiederum Java-Anwendungen um Funktionen erweitern.&lt;br /&gt;
&lt;br /&gt;
Enthält eine JAR-Datei ein Verzeichnis META-INF mit einer Manifest-Datei mit einem Eintrag für eine Startklasse (Main-Class), kann eine die JAR-Datei bei passender JRE per Mausklick gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=META-INF=&lt;br /&gt;
Der META-INF Ordner enthält immer eine Datei MANIFEST.MF, in dieser werden Informationen über das Archiv bzw. das Programm beschrieben.&lt;br /&gt;
&lt;br /&gt;
Wenn eine JAR-Datei [[Java-Applets und Java WebStart-Anwendungen signieren|signiert]] wird, wird automatisch eine Signaturdatei generiert und im META-INF- Verzeichnis der JAR-Datei abgelegt , das auch das Manifest des Archivs enthält. Signaturdateien haben Dateinamen mit der Erweiterung .SF . Außerdem eine Signaturblock-Datei mit der Dateiendung .DSA.&lt;br /&gt;
&lt;br /&gt;
Die Mindestausführung einer Manifest-Datei sieht bspw. so aus:&lt;br /&gt;
 Manifest-Version: 1.0 &lt;br /&gt;
 Main-Class: HelloWorld &lt;br /&gt;
 [LEERZEILE]&lt;br /&gt;
&lt;br /&gt;
==MANIFEST.MF==&lt;br /&gt;
In der Manifest-Datei werden verschiedene Eigenschaften beschrieben. Die Eigenschaften werden durch einen Tupel von Schlüsselwort und Wert angegeben.&lt;br /&gt;
Für verschiedene Bereiche der Verwendung, sind auch verschiedene Eigenschaften vorgesehen:&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
! Bereich&lt;br /&gt;
! Attribut&lt;br /&gt;
! Beschreibung&lt;br /&gt;
! Optional&lt;br /&gt;
|-&lt;br /&gt;
| Allgemein&lt;br /&gt;
| Manifest-Version&lt;br /&gt;
| Versionsnummer für die Manifest-Datei&lt;br /&gt;
| Nein&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Created-By&lt;br /&gt;
| Optionale Angabe des Erstellers&lt;br /&gt;
| Ja&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Name&lt;br /&gt;
| Angabe des Namens einer Datei, z.B. für eine Signatur oder Bean&lt;br /&gt;
| Ja&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| SHA1-Digest&lt;br /&gt;
| SHA1 Signatur für die darüber angegebene Datei&lt;br /&gt;
| Ja&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Signature-Version&lt;br /&gt;
| Definiert die Version der Signatur&lt;br /&gt;
| Ja&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Class-Path&lt;br /&gt;
| Angabe von Klassen und JAR-Dateien, die zum [[Classpath]] hinzugefügt werden sollen, sie sollten immer mit ./ beginend angegeben werden&lt;br /&gt;
| Ja&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Permissions&lt;br /&gt;
| Seit Java 7 Update 51 ist die Permissions-Angabe anzugeben. Gültig sind &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt; (keine Rechteerweiterung benötigt) und &amp;lt;code&amp;gt;all-permissions&amp;lt;/code&amp;gt; (z.B. für Schreib-/Leserechte). (Mehr dazu unter [https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#A1148525 Permissions])&lt;br /&gt;
| Nein (nur für Applets und WebStart)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Application-Name&lt;br /&gt;
| Hier muss der Name der Anwendung angegeben werden. (Mehr dazu unter [https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#A1148568 Application-Name])&lt;br /&gt;
| Nein (nur für Applets und WebStart)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Codebase&lt;br /&gt;
| Hier muss die Quell-Domain, also der Herkunftsort angegeben werden. (Mehr dazu unter [https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#CIHJIIHD Codebase])&lt;br /&gt;
| Nein (nur für Applets und WebStart)&lt;br /&gt;
|-&lt;br /&gt;
| Anwendungen&lt;br /&gt;
| Main-Class&lt;br /&gt;
| Angabe der Mainclass, sie ist nötig wenn die JAR-Datei ausführbar sein soll&lt;br /&gt;
| Ja (wenn es kein ausführbares Programm ist)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| SplashScreen-Image&lt;br /&gt;
| Angabe eines Bildes, das als Splash-Screen angezeigt wird. Das Bild muss in der JAR vorhanden sein.&lt;br /&gt;
| Ja&lt;br /&gt;
|-&lt;br /&gt;
| Applets&lt;br /&gt;
| Extension-List&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| *-Extension-Name&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| *-Specification-Version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| *-Implementation-Version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| *-Implementation-Vendor-Id&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| *-Implementation-URL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Extensions&lt;br /&gt;
| Extension-Name&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Implementation-Title&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Implementation-Vendor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Implementation-Vendor-Id &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Implementation-URL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Specification-Title&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Specification-Version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Specification-Vendor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Sealed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| J2EE&lt;br /&gt;
| Java-Bean&lt;br /&gt;
| Definiert eine Java Bean Klasse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| x-Digest-y&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Magic&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Jede Manifest-Datei muss mit einer Leerzeile abgeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
==Beispiel einer Manifest-Datei==&lt;br /&gt;
 Manifest-Version: 1.0&lt;br /&gt;
 Created-By: Eagle Projekt Manager 1.1.0.0&lt;br /&gt;
 Permissions: all-permissions&lt;br /&gt;
 Codebase: *.eagleside.de&lt;br /&gt;
 Application-Name: DatabaseDesigner&lt;br /&gt;
 Main-Class: de.eagleside.databasedesigner.DatabaseDesignerMain&lt;br /&gt;
 CLASS-PATH: ./lib/jdom.jar ./lib/EagleSwingLibrary.jar ./lib/EagleUtilLibrary.jar&lt;br /&gt;
 [Leerzeile!]&lt;br /&gt;
&lt;br /&gt;
Es ist üblich, Abhängigkeiten in einem Unterverzeichnis relativ zur Programm-Jar-Datei abzulegen.&lt;br /&gt;
Laufwerksangaben sind systemabhängig, daher sollte darauf verzichtet werden.&lt;br /&gt;
&lt;br /&gt;
=JAR-Datei erstellen=&lt;br /&gt;
Um eine JAR-Datei aus einem fertig kompilierten Projekt auf einer Kommandozeile zu erstellen, ist prinzipiell folgender Befehl anzuwenden:&lt;br /&gt;
 jar cvfm  MeinJar.jar manifest.txt input-file(s)&lt;br /&gt;
Das &#039;&#039;input-file(s)&#039;&#039; ist eine Liste von einer oder mehreren Dateien, die die Jar-Datei enthalten soll. Mehrere Dateien werden mit einem Leerzeichen voneinander abgegrenzt. Mehrere Dateien gleichen Typs können mit einem Wildcard-Symbol (*) angegeben werden. Wenn ein zu speicherndes Element ein Verzeichnis ist, werden die Inhalte dieses Verzeichnisses rekursiv der Jar-Datei hinzugefügt.&lt;br /&gt;
Einen Sonderfall stellt der Punkt am Ende einer solchen Anweisung dar. Der Punkt sagt aus, dass der Inhalt des Verzeichnisses, von dem aus aus der Jar-Befehl gestartet wurde ins Jar-Archiv eingefügt werden soll.&lt;br /&gt;
 jar cvfm MeinJar.jar manifest.txt .&lt;br /&gt;
Der Befehl erzeigt eine Jar-Datei, die eine Manifest-Datei enthält, sowie alle Verzeichnisse und Dateien des Verzeichnisses, von dem heraus der Jar-Befehl gestartet wurde.&lt;br /&gt;
&lt;br /&gt;
Auch folgender Befehl zum Erzeugen einer Jar-Datei ist gültig:&lt;br /&gt;
 jar cvfm MeinJar.jar manifest.txt icons audio *.class Lizenz.txt&lt;br /&gt;
Der Jar-Datei wird ein Manifest hinzugefügt. Außerdem wird es Verzeichnisse mit Icons und Audiodateien (icons, audio) enthalten, in denen die Programm-Icons und einige Sound-Dateien abgelegt wurden. Schließlich noch alle Class-Dateien und eine Lizenz-Datei.&lt;br /&gt;
Die meisten verfügbares [[IDE]]s haben bereits Funktionen an Bord, die das komfortabel per Mausklick erledigen können.&lt;br /&gt;
&lt;br /&gt;
=JAR-Datei ausführen=&lt;br /&gt;
Um die Programmausführung einer Java-Anwendung, die in einer einer JAR-Datei gespeichert ist, per Doppelklick zu starten ist es notwendig, dass die Dateiendung (.jar) mit dem Java-Interpreter verknüpft ist. Normalerweise ist das bei Windows-System der Fall. Bei Linux-Systemen muss da oft nachgeholfen werden.&lt;br /&gt;
&lt;br /&gt;
 Tipp: Wie Sie vorgehen, wenn eine Jar-Datei nicht startet, erfahren Sie im Artikel [[Jar-Datei mit Doppelklick nicht ausführbar]].&lt;br /&gt;
&lt;br /&gt;
Neben dem Start per Mausklick, ist aber insbesondere der Start in der Befehlszeile wichtig, um [[Was ist eine Exception|Exceptions]], die während der Ausführung in die Java-Console geworfen werden, lesen zu können. Folgender Befehl startet die Ausführung einer Anwendung, die in einer JAR-Datei gespeichert ist:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*[https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html JAR File Specification]&lt;br /&gt;
*[http://docs.oracle.com/javase/tutorial/deployment/jar/index.html Packaging Programs in JAR Files]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[https://java-blog-buch.bytes4fun.de/070404-jar-klassen-zusammenfassen-und-ausfuehren/ Java-Blog-Buch: Jar - Klassen zusammenfassen und ausführen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Gleitkommazahlen_mit_Java_runden&amp;diff=9547</id>
		<title>Gleitkommazahlen mit Java runden</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Gleitkommazahlen_mit_Java_runden&amp;diff=9547"/>
		<updated>2026-07-01T14:35:59Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In unserem [https://www.java-blog-buch.de/11-02-mathematisches-mit-java-lang-math/ Artikel über die Klasse java.lang.Math] haben wir auf unserer eLerning-Plattform [https://java-blog-buch.bytes4fun.de/ Java-Blog-Buch] bereits einige Dinge zum Thema Runden mit Java besprochen. Mit einigen Code-Beispielen möchten wir hier noch einmal abrunden.&lt;br /&gt;
&lt;br /&gt;
=Cast=&lt;br /&gt;
Eine einfache und ungenaue Methode zu runden ist, der Gleitkommazahl die Nachkommastellen einfach abzuschneiden. Beim Casten wird also immer abgerundet. In einigen Fällen kann das genügen, in den meisten jedoch nicht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   /**&lt;br /&gt;
   * Schneidet Nachkommastellen einer Gleitkommazahl ab.&lt;br /&gt;
   *&lt;br /&gt;
   * @param value ist der Gleitkommazahlenwert, dem die Nachkommastellen abgeschnitten werden sollen&lt;br /&gt;
   */&lt;br /&gt;
   private int cutOffDecimalPlaces(double value) {&lt;br /&gt;
      return (int) value;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach Übergabe der Zahl 1234.565 erhalten wir 1234 als Rückgbewert.&lt;br /&gt;
&lt;br /&gt;
=Math.round()=&lt;br /&gt;
Die Klasse {{JAPI|java.lang.Math}} bietet eine [[Methode]] zum ([https://de.wikipedia.org/wiki/Rundung#Kaufm%C3%A4nnisches_Runden kaufmännischem]) Runden von Gleitkommazahlen an. Mit dieser können wir recht einfach eine eigene Methode schreiben, die uns Dezimalzahlen auf eine beliebige Anzahl Nachkommastellen rundet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   /**&lt;br /&gt;
   * Rundet den übergebenen Wert auf die Anzahl der übergebenen Nachkommastellen&lt;br /&gt;
   *&lt;br /&gt;
   * @param value ist der zu rundende Wert.&lt;br /&gt;
   * @param decimalPoints ist die Anzahl der Nachkommastellen, auf die gerundet werden soll.&lt;br /&gt;
   */&lt;br /&gt;
   private double round(double value, int decimalPoints) {&lt;br /&gt;
      double d = Math.pow(10, decimalPoints);&lt;br /&gt;
      return Math.round(value * d) / d;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf der Methode in einer [[Klasse]] zum Runden einer Zahl auf zwei Nachkommastellen sieht dann z.B. so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   System.out.println(round(1234.565, 2);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Math.rint()=&lt;br /&gt;
Die Methode rint() rundet double-Werte mathematisch.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Rundet den übergebenen Wert auf die Anzahl der übergebenen Nachkommastellen&lt;br /&gt;
 *&lt;br /&gt;
 * @param value ist der zu rundende Wert.&lt;br /&gt;
 * @param decimalPoints ist die Anzahl der Nachkommastellen, auf die mathematisch gerundet werden soll.&lt;br /&gt;
 */&lt;br /&gt;
private double rint(double value, int decimalPoints) {&lt;br /&gt;
   double d = Math.pow(10, decimalPoints);&lt;br /&gt;
   return Math.rint(value * d) / d;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Math.floor()=&lt;br /&gt;
Die Methode floor() rundet auf die nächst kleinere Zahl.&lt;br /&gt;
&lt;br /&gt;
=Math.ceil()=&lt;br /&gt;
Die Methode ceil() rundet auf die nächst größere Zahl.&lt;br /&gt;
&lt;br /&gt;
=String#format()=&lt;br /&gt;
In Programmen müssen Ergebnisse von Berechnungen oft für eine Ausgabe passend formatiert werden. Dazu gehört auch &#039;&#039;&#039;das Runden, bspw. von Euro-Beträgen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
&lt;br /&gt;
public class Formatter {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      double number = 1234.565;&lt;br /&gt;
      System.out.println(number+&amp;quot; gerundet: &amp;quot;+String.format(&amp;quot;%1.2f €&amp;quot;, number));&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Möchte man bspw. das englische oder französische Zahlenformat ausgeben, muss noch ein passendes {{JAPI|Locale}} als erster Parameter der format()-[[Methode]] übergeben werden.&lt;br /&gt;
 String.format(Locale.FRENCH, &amp;quot;%1.2f&amp;quot;, number)&lt;br /&gt;
Ansonsten wird das von der [[JRE]] erkannte Locale des [[Betriebssystem|Betriebssystems]] verwendet.&lt;br /&gt;
&lt;br /&gt;
=NumberFormat=&lt;br /&gt;
Auch relativ einfach ist das Runden von Dezimalzahlen mit [[NumberFormat]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.NumberFormat;&lt;br /&gt;
&lt;br /&gt;
public class Formatter {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      double number = 1234.565;&lt;br /&gt;
      NumberFormat formatter = NumberFormat.getInstance();&lt;br /&gt;
      formatter.setMaximumFractionDigits(2);&lt;br /&gt;
      System.out.println(number+&amp;quot; gerundet: &amp;quot;+formatter.format(number));&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der Methode &amp;lt;code&amp;gt;NumberFormat#setMaximumFractionDigits(int value)&amp;lt;/code&amp;gt; auf eine festgelegte Anzahl an Nachkommastellen begrenzen. Dabei wird auch eine Rundung der Zahl vorgenommen.&lt;br /&gt;
Möchte man bspw. das englische oder französische Zahlenformat ausgeben, muss noch ein passendes {{JAPI|Locale}} als Parameter der &amp;lt;code&amp;gt;getInstance()&amp;lt;/code&amp;gt;-[[Methode]] übergeben werden.&lt;br /&gt;
 NumberFormat formatter = NumberFormat.getInstance(Locale.FRENCH);&lt;br /&gt;
Ansonsten wird das von der [[JRE]] erkannte Locale des [[Betriebssystem|Betriebssystems]] verwendet.&lt;br /&gt;
&lt;br /&gt;
=DecimalFormat=&lt;br /&gt;
Noch eine einfache Variante für das Runden von Gleitkommazahlen mit Java - mit [[DecimalFormat]].&lt;br /&gt;
&lt;br /&gt;
{{JAPI|DecimalFormat}} ist eine Subklasse von NumberFormat für die Formatierung von Dezimalzahlen. Als Unterklasse von NumberFormat stehen auch hier Formatierungen von Dezimalzahlen in Abhängigkeit des Gebietsschemas zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.DecimalFormat;&lt;br /&gt;
&lt;br /&gt;
public class Formatter {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      double number = 1234.565;&lt;br /&gt;
      DecimalFormat formatter = new DecimalFormat(&amp;quot;#.##&amp;quot;);&lt;br /&gt;
      System.out.println(number+&amp;quot; gerundet: &amp;quot;+formatter.format(number));&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DecimalFormat unterstützt verschiedene lokalisierbare Zahlen-Typen, so auch Ganzzahlen (123), Festkommazahlen (123,4), wissenschaftliche Notation (1,23E4), Prozentangaben (12%) und Währungsbeträge (123 $).&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
*{{JAPI|NumberFormat}}&lt;br /&gt;
*{{JAPI|DecimalFormat}}&lt;br /&gt;
*[[String]]&lt;br /&gt;
*{{JAPI|String}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java-Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Byte-Welt&amp;diff=9546</id>
		<title>Byte-Welt</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Byte-Welt&amp;diff=9546"/>
		<updated>2026-07-01T14:35:24Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Entstehung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Byte-Welt&#039;&#039;&#039; ging aus einem älteren Projekt hervor, das von einigen jungen Programmierern 2004 nach wachsender Unzufriedenheit mit ihrem Lieblings-Java-Forum entstand. Damals hieß das Projekt noch &#039;&#039;&#039;Coding Community&#039;&#039;&#039; und beschäftigte sich hauptsächlich mit der Programmierung in Java. Auch ein kleines Forum und einen Entwickler-Chat gab es damals schon, beide aber wenig besucht. Einige Programmierer-Freunde verließen das Projekt, die Community schrumpfte. Im Juni 2006 wurde von [[Benutzer:EagleEye|EagleEye]] und einer Hand voll Programmierer-Freunde ein Neuanfang vereinbart. Der etwas sperrige Name wurde verworfen und Byte-Welt wurde gegründet.&lt;br /&gt;
&lt;br /&gt;
==Entstehung==&lt;br /&gt;
Bei Problemen im Programmieralltag holte man sich zu deren Lösung Ideen und Anregungen aus Internet-Foren, Wikis, Chats etc. - heute häufig auch von KI-Assistenten. Die meisten Programmierer beherrschen mehrere Programmiersprachen, um ihre tägliche Arbeit bewältigen zu können und melden sich daher bei mehreren spezialisierten Communities an, die sich mit jeweils einer Programmiersprache beschäftigen.&lt;br /&gt;
&lt;br /&gt;
Die Idee war daher, ein Projekt zu schaffen, in dem sich Programmierer der wichtigsten Programmiersprachen unter einem Dach und mit nur einem Benutzerkonto über verschiedenste Web-Dienste austauschen können. Dieses Wiki ist demnach nur ein Teil von &#039;&#039;byte-welt.net&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Byte-Welt selbst versammelte IT-Experten vieler Fachrichtungen, und konnte so ein breites Spektrum abdecken. Die bis dato aktive Community bestand aus Schülern, Studenten, Fachinformatikern und Diplom-Ingenieuren. Viele Hobby-Entwickler fanden auch den Weg zu uns.&lt;br /&gt;
&lt;br /&gt;
Heute ist Byte-Welt zum großen Teil ein Archiv für IT-Wissen und damit ein Teil deutscher IT-Geschichte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Inhalte==&lt;br /&gt;
&#039;&#039;byte-welt.net&#039;&#039; bestand aus einem Forum (einem heute noch aktiven Entwickler- [https://discordapp.com/invite/S4P8RAD Chat], diesem [http://wiki.byte-welt.de Wiki], der nicht mehr aktiven Java Link Base und mehreren weiteren Projekten wie bspw. das heute noch verfügbare [https://java-blog-buch.bytes4fun.de/ Java Blog Buch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Byte-Welt}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[http://www.byte-welt.net Byte-Welt-Forum]&lt;br /&gt;
*[[Byte-Welt_Wiki:Impressum|Impressum]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Byte-Welt]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=B%C3%BCcher_und_Tutorials_(Java)&amp;diff=9545</id>
		<title>Bücher und Tutorials (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=B%C3%BCcher_und_Tutorials_(Java)&amp;diff=9545"/>
		<updated>2026-07-01T14:27:47Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* eBooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liste von Büchern und Tutorials über die Programmiersprache [[Java]]. Diskussionen über Bücher und Tutorials können im entsprechenden [http://forum.coding-community.net/showthread.php5?t=66 Thread des Forums] geführt werden.&lt;br /&gt;
&lt;br /&gt;
==Bücher==&lt;br /&gt;
*[http://www.amazon.de/gp/product/382726281X/ Java in 21 Tagen] von Laura Lemay&lt;br /&gt;
*[http://www.kickjava.com/books/java.htm Free Computer Books] Riesiges Sortiment an Büchern über Java.&lt;br /&gt;
*[http://www.amazon.de/dp/3897214482/ Java von Kopf bis Fuß] Ein Bestseller!&lt;br /&gt;
*[http://www.amazon.de/Java-als-erste-Programmiersprache-Einsteiger/dp/3834806560 Java als erste Programmiersprache: Vom Einsteiger zum Profi] von Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll&lt;br /&gt;
*[http://www.amazon.de/gp/product/3897214210/ Entwurfsmuster von Kopf bis Fuß] von Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates&lt;br /&gt;
*[http://www.amazon.de/Einführung-Java-BlueJ-Objektorientierte-Programmierung/dp/3836216302/ Einführung in Java mit BlueJ: Objektorientierte Programmierung für Einsteiger] von Florian Siebler&lt;br /&gt;
&lt;br /&gt;
==eBooks==&lt;br /&gt;
*[http://www.javabuch.de/ Das Javabuch]&lt;br /&gt;
*[http://openbook.galileocomputing.de/javainsel/ Java ist auch eine Insel] von Christian Ullenboom&lt;br /&gt;
*[https://java-blog-buch.bytes4fun.de/ Java Blog Buch] Ein Java-Buch in Blog-Form&lt;br /&gt;
*[http://www.programmierkurs-java.de/ Programmierkurs Java] von Dr.-Ing. Dietrich Boles&lt;br /&gt;
*[http://www.gailer-net.de/tutorials/java/index.html Java Tutorial interaktiv — Programmieren lernen mit Java] von Bradley Kjell (übersetzt von Heinrich Gailer)&lt;br /&gt;
&lt;br /&gt;
==Video Tutorials==&lt;br /&gt;
*[http://www.javavideokurs.de/ Der Java Video Kurs: Dein Weg zum Java-Profi!] von Thomas Klutsch&lt;br /&gt;
*[https://www.video2brain.com/de/search.htm?search_entry=java Video2Brain - Java-Themen Übersicht] (Interaktive Schulungs DVD-ROMs)&lt;br /&gt;
&lt;br /&gt;
==Größere Tutorials==&lt;br /&gt;
Allgemein:&lt;br /&gt;
*[http://wiki.byte-welt.net/mediawiki/download/Ein%20kleines%20Zeichnungsprogramm.zip Ein kleines Zeichenprogramm] (inkl. Beispielprogramm) von Benjamin Sigg und Janni Kovacs&lt;br /&gt;
*[http://www.java2s.com/ Java2S] (zahlreiche Beispiele)&lt;br /&gt;
&lt;br /&gt;
Swing:&lt;br /&gt;
*[https://docs.oracle.com/javase/tutorial/uiswing/index.html Creating a GUI With JFC/Swing] Größtes Swing-Tutorial von Oracle.&lt;br /&gt;
*[http://www.codeguru.com/java/Swing/ Java CodeGuru:Swing] Modifikation von GUI-Elementen&lt;br /&gt;
&lt;br /&gt;
==Kleinere Tutorials==&lt;br /&gt;
*[http://www.coreservlets.com/Apache-Tomcat-Tutorial/tomcat-7-with-eclipse.html Tutorial: Installing Tomcat 7 and Using it with Eclipse] auf [http://www.coreservlets.com coreservlets.com]&lt;br /&gt;
&lt;br /&gt;
==Nachschlagewerke==&lt;br /&gt;
&lt;br /&gt;
*[http://javaalmanac.com/egs/index.html Das grosse Java-Almanac]&lt;br /&gt;
*[http://www.koders.com/ Source Code Search Engine] Wer Code sucht, der wird hier fündig.&lt;br /&gt;
&lt;br /&gt;
==Code-Beispiele==&lt;br /&gt;
*[http://www.java-only.com/ Java-Only | Tutorials for Java]&lt;br /&gt;
*[http://jexamples.com/ Java Examples - JExamples]&lt;br /&gt;
*[http://www.java2s.com/ Programming tutorials and source code  examples]&lt;br /&gt;
*[http://www-st.inf.tu-dresden.de/SalesPoint/v3.1/faq/SwingExamples/index.html Swing Examples]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Tutorials (Java)]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vorlage:Fragen_stellen&amp;diff=9544</id>
		<title>Vorlage:Fragen stellen</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vorlage:Fragen_stellen&amp;diff=9544"/>
		<updated>2026-07-01T14:27:18Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Fragen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=Fragen=&lt;br /&gt;
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!&lt;br /&gt;
&lt;br /&gt;
*Besuche unseren [https://discordapp.com/invite/S4P8RAD Chat]&lt;br /&gt;
&lt;br /&gt;
Wir helfen dir gerne!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Verwendung in deinem Artikel, kopierst du folgenden Text und fügst ihn in deinen Artikel ein:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;{{Fragen stellen}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Kategorie:Vorlagen]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmier_Blogs&amp;diff=9543</id>
		<title>Programmier Blogs</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmier_Blogs&amp;diff=9543"/>
		<updated>2026-07-01T14:25:58Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blogs rund um das Thema der Programmierung&lt;br /&gt;
&lt;br /&gt;
==Java==&lt;br /&gt;
*[https://java-blog-buch.bytes4fun.de/ Java Blog Buch]&lt;br /&gt;
*[http://www.kurungkurawal.com/ {Kurung Kurawall}]&lt;br /&gt;
*[http://www.informit.com/articles/ Informit Articles]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9542</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9542"/>
		<updated>2026-07-01T14:21:10Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Byte-Welt}}&lt;br /&gt;
&amp;lt;!-- Willkommen --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Willkommen im Byte-Welt-Wiki&amp;lt;/h2&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:100%; border-top:0px; padding:0.75em; text-align:left&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Was das Byte-Welt-Wiki heute ist&amp;lt;/h3&amp;gt;&lt;br /&gt;
Das Byte-Welt-Wiki ist ein Archiv und Lernprojekt im Themenbereich Hardware und Programmierung. Viele Inhalte, wie Best Practice, Codestücke oder Tutorials stammen aus der aktiven Zeit der Byte‑Welt‑Community, die über Jahre ein Forum, einen Chat, dieses Wiki und das Java-Blog-Buch betrieb. Zahlreiche Beiträge wurden damals gemeinschaftlich erstellt und gepflegt – ein Stück deutschsprachiger IT‑Geschichte, die hier bewusst erhalten bleibt.&lt;br /&gt;
&amp;lt;h3&amp;gt;Wie das Projekt weitergeführt wird&amp;lt;/h3&amp;gt;&lt;br /&gt;
Das Byte-Welt-Wiki wird schrittweise modernisiert. Die Weiterentwicklung erfolgt bewusst langsam und ohne Zeitdruck. Monat für Monat kommen neue Themen hinzu oder bestehende Inhalte werden ergänzt.&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Autor des Monats --&amp;gt;&amp;lt;!-- Tipp --&amp;gt;&amp;lt;!-- Newsflash --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;!--&amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; background-color:#2C4051&amp;quot;&amp;gt;Autor/-in des Monats&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Tipp&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Newsflash&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!--&amp;lt;td style=&amp;quot;border-left:1px solid #2C4051; border-right:1px solid #2C4051; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Pokal.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;I&#039;&#039;&#039;n diesem Monat wurden folgende Autoren für gute Arbeit im Wiki ausgezeichnet:&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Gluehbirne.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt; &#039;&#039;&#039;F&#039;&#039;&#039;ür das schnelle Navigieren im Wiki bitte das [[Inhalt|Inhaltsverzeichnis]] nutzen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Newsflash.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;News aus dem Byte-Welt Themenbereich&#039;&#039;&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:20px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{{Neuer Artikel}}&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;strong&amp;gt;Zum Jahresanfang stellte Byte-Welt den Forum-Betrieb ein!&amp;lt;/strong&amp;gt;&lt;br /&gt;
        Apache NetBenas 30 erschienen&lt;br /&gt;
        Eclipse 2026-06 erschienen&lt;br /&gt;
        Oracle veröffentlicht Java 26 und das Update für Java SE 8 Update 491&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zufallsartikeln Nr1 + 2 --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Kategorien&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:48%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;tagcloud&amp;gt;&lt;br /&gt;
         min_count=5&lt;br /&gt;
       &amp;lt;/tagcloud&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9541</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9541"/>
		<updated>2026-07-01T14:11:04Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Byte-Welt}}&lt;br /&gt;
&amp;lt;!-- Willkommen --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Willkommen im Byte-Welt-Wiki&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:100%; border-top:0px; padding:0.75em; text-align:left&amp;quot;&amp;gt;Das Byte-Welt-Wiki ist ein Archiv und Lernprojekt im Themenbereich Hardware und Programmierung. Viele Inhalte stammen aus der aktiven Zeit der Byte‑Welt‑Community, die über Jahre ein Forum, einen Chat, dieses Wiki und das Java-Blog-Buch betrieb. Zahlreiche Beiträge wurden damals gemeinschaftlich erstellt und gepflegt – ein Stück deutschsprachiger IT‑Geschichte, die hier bewusst erhalten bleibt.&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Autor des Monats --&amp;gt;&amp;lt;!-- Tipp --&amp;gt;&amp;lt;!-- Newsflash --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;!--&amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; background-color:#2C4051&amp;quot;&amp;gt;Autor/-in des Monats&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Tipp&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Newsflash&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!--&amp;lt;td style=&amp;quot;border-left:1px solid #2C4051; border-right:1px solid #2C4051; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Pokal.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;I&#039;&#039;&#039;n diesem Monat wurden folgende Autoren für gute Arbeit im Wiki ausgezeichnet:&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Gluehbirne.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt; &#039;&#039;&#039;F&#039;&#039;&#039;ür das schnelle Navigieren im Wiki bitte das [[Inhalt|Inhaltsverzeichnis]] nutzen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Newsflash.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;News aus dem Byte-Welt Themenbereich&#039;&#039;&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:20px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{{Neuer Artikel}}&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;strong&amp;gt;Zum Jahresanfang stellte Byte-Welt den Forum-Betrieb ein!&amp;lt;/strong&amp;gt;&lt;br /&gt;
        Apache NetBenas 30 erschienen&lt;br /&gt;
        Eclipse 2026-06 erschienen&lt;br /&gt;
        Oracle veröffentlicht Java 26 und das Update für Java SE 8 Update 491&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zufallsartikeln Nr1 + 2 --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Kategorien&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:48%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;tagcloud&amp;gt;&lt;br /&gt;
         min_count=5&lt;br /&gt;
       &amp;lt;/tagcloud&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9540</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=9540"/>
		<updated>2026-07-01T13:51:45Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Byte-Welt}}&lt;br /&gt;
&amp;lt;!-- Willkommen --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Willkommen im Byte-Welt-Wiki&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:100%; border-top:0px; padding:0.75em; text-align:left&amp;quot;&amp;gt;Das Byte-Welt-Wiki ist ein Archiv und Lernprojekt im Themenbereich Hardware und Programmierung. Viele Inhalte stammen aus der aktiven Zeit der Byte‑Welt‑Community, die über Jahre ein Forum, einen Chat, dieses Wiki und das Java-Blog-Buch betrieb. Zahlreiche Beiträge wurden damals gemeinschaftlich erstellt und gepflegt – ein Stück deutschsprachiger IT‑Geschichte, die hier bewusst erhalten bleibt.&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Autor des Monats --&amp;gt;&amp;lt;!-- Tipp --&amp;gt;&amp;lt;!-- Newsflash --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:2em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;!--&amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; background-color:#2C4051&amp;quot;&amp;gt;Autor/-in des Monats&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Tipp&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Newsflash&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!--&amp;lt;td style=&amp;quot;border-left:1px solid #2C4051; border-right:1px solid #2C4051; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Pokal.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;I&#039;&#039;&#039;n diesem Monat wurden folgende Autoren für gute Arbeit im Wiki ausgezeichnet:&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Gluehbirne.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt; &#039;&#039;&#039;F&#039;&#039;&#039;ür das schnelle Navigieren im Wiki bitte das [[Inhalt|Inhaltsverzeichnis]] nutzen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Newsflash.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;News aus dem Byte-Welt Themenbereich&#039;&#039;&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;!--&amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #000; width:30%; border-top:0px; padding:5px&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[Benutzer:AndreUhres|AndreUhres]], [[Benutzer:SeannWilliamScott|SeannWilliamScott]]&amp;lt;br/&amp;gt;mehr dazu [[Auszeichnungen| hier..]]&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:20px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{{Neuer Artikel}}&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;strong&amp;gt;Zum Jahresanfang stellte Byte-Welt den Forum-Betrieb ein!&amp;lt;/strong&amp;gt;&lt;br /&gt;
        Apache NetBenas 26 erschienen [https://netbeans.apache.org/front/main/download/nb26/]&lt;br /&gt;
        Eclipse 2026-06 erschienen [https://www.heise.de/news/Eclipse-IDE-2025-06-verbessert-das-Schreiben-und-Debuggen-von-Java-Code-10443131.html]&lt;br /&gt;
        Oracle veröffentlicht Java 26 und das Update für Java SE 8 Update 491&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zufallsartikeln Nr1 + 2 --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:0.75em; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Kategorien&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:48%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;tagcloud&amp;gt;&lt;br /&gt;
         min_count=5&lt;br /&gt;
       &amp;lt;/tagcloud&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vorlage:Byte-Welt&amp;diff=9539</id>
		<title>Vorlage:Byte-Welt</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vorlage:Byte-Welt&amp;diff=9539"/>
		<updated>2026-07-01T13:40:47Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 1.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; |[https://discordapp.com/invite/S4P8RAD Byte-Welt-Chat]&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; |[https://java-blog-buch.bytes4fun.de/ Java-Blog-Buch]&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; |[https://wiki.byte-welt.net Byte-Welt-Wiki]&lt;br /&gt;
&amp;lt;!-- width=&amp;quot;22%&amp;quot; |[http://www.javalinkbase.de/ JavaLinkBase.de] --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie:Vorlagen]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7596</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7596"/>
		<updated>2018-02-28T15:11:06Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
 [/]&lt;br /&gt;
  |__[META-INF]&lt;br /&gt;
  |    |__ MANIFEST.MF&lt;br /&gt;
  |&lt;br /&gt;
  |__[mypackage]&lt;br /&gt;
       |__ Main.class&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
&lt;br /&gt;
 Manifest-Version: 1.0&lt;br /&gt;
 Main-Class: mypackage.Main&lt;br /&gt;
 &amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&lt;br /&gt;
 Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
 *Ist eine aktuelle JRE installiert? Ältere JREs starten Code von neueren Compilern nicht.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[JAR-Datei]]&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java Version festlegen]]&lt;br /&gt;
*[[Java-Compiler-Level und .class-Datei Versionen (major- und minor version number)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Java-Compiler-Level_und_.class-Datei_Versionen_(major-_und_minor_version_number)&amp;diff=7595</id>
		<title>Java-Compiler-Level und .class-Datei Versionen (major- und minor version number)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Java-Compiler-Level_und_.class-Datei_Versionen_(major-_und_minor_version_number)&amp;diff=7595"/>
		<updated>2018-02-28T15:10:06Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Compiler-Level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[Compiler]] erzeugt vom [[JDK]] versionsabhängige Datei-Formate, die der [[Interpreter]] nach bestimmten Merkmalen untersucht, bevor er die [[Klasse]] ausführt.&lt;br /&gt;
&lt;br /&gt;
Die Versionsnummern geben ihm Aufschluss darüber, ob eine Klasse mit einem kompatiblen JDK kompiliert wurde. Dazu vergleicht er u.a. die major- und die minor version number, welche neben der berühmten magic number (0xCAFEBABE) im Fileheader stehen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend werden in einer Übersicht alle bisher veröffentlichten JDKs mit den dazu gehörenden major version und minor version numbers aufgelistet:&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
! Major Version&lt;br /&gt;
! Minor Version&lt;br /&gt;
! JDK Version&lt;br /&gt;
|-&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 46&lt;br /&gt;
| 0&lt;br /&gt;
| 1.2&lt;br /&gt;
|-&lt;br /&gt;
| 47&lt;br /&gt;
| 0&lt;br /&gt;
| 1.3&lt;br /&gt;
|-&lt;br /&gt;
| 48&lt;br /&gt;
| 0&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
| 49&lt;br /&gt;
| 0&lt;br /&gt;
| 1.5&lt;br /&gt;
|-&lt;br /&gt;
| 50&lt;br /&gt;
| 0&lt;br /&gt;
| 1.6&lt;br /&gt;
|-&lt;br /&gt;
| 51&lt;br /&gt;
| 0&lt;br /&gt;
| 1.7&lt;br /&gt;
|-&lt;br /&gt;
| 52&lt;br /&gt;
| 0&lt;br /&gt;
| 1.8&lt;br /&gt;
|-&lt;br /&gt;
| 53&lt;br /&gt;
| 0&lt;br /&gt;
| 1.9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Eine Java-Anwendung, die mit einem aktuellen JDK kompiliert wurde, läuft nicht in einer älteren JRE.&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UnsupportedClassVersionError.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Compiler-Level ==&lt;br /&gt;
&lt;br /&gt;
In den meisten Fällen genügt es bereits, den Compiler-Level auf die Zielplattform auszurichten und neu zu kompilieren.&lt;br /&gt;
Das heißt, dass mit einer Compiler-Option eingestellt werden kann, welche JRE-Version ein Programm mindestens benötigt, um ausgeführt zu werden.&lt;br /&gt;
&lt;br /&gt;
Bsp: Eine Java-Anwendung wurde mit dem JDK 7 geschrieben. Beim Ausführen wird beim Anwender ein {{JAPI|UnsupportedClassVersionError}} in der Java-Konsole ausgegeben. &lt;br /&gt;
Der Programmierer hat in seinem Programm nur Klassen aus den JDKs bis Version 6 verwendet. Dann kann er recht einfach die Anzahl der erreichbaren Ziel-VMs vergrößern, indem er den Compiler-Level auf Java 6 einstellt und neu kompiliert. &lt;br /&gt;
Die großen [[IDE|IDEs]] wie Eclipse und Netbeans bieten dazu Optionen in den Einstellungen an. Für Java-Editoren muss meist die Option an den Compiler-Aufruf angehängt werden.&lt;br /&gt;
&lt;br /&gt;
 javac -source 1.6 -target 1.6 MeineKlasse.java&lt;br /&gt;
&lt;br /&gt;
Mit dieser Anweisung akzeptiert der Compiler nur Klassen, die bis zum JDK 6 eingeführt wurden und erzeugt [[Bytecode]] für JREs ab Version 6.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:L-ectron-X|L-ectron-X]] 02:53, 01. Feb 2012 (CET)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7594</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7594"/>
		<updated>2018-02-28T15:08:42Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
 [/]&lt;br /&gt;
  |__[META-INF]&lt;br /&gt;
  |    |__ MANIFEST.MF&lt;br /&gt;
  |&lt;br /&gt;
  |__[mypackage]&lt;br /&gt;
       |__ Main.class&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
&lt;br /&gt;
 Manifest-Version: 1.0&lt;br /&gt;
 Main-Class: mypackage.Main&lt;br /&gt;
 &amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&lt;br /&gt;
 Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
 *Ist eine aktuelle JRE installiert? Ältere JREs starten Code von neueren Compilern nicht.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[JAR-Datei]]&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java Version festlegen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7593</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7593"/>
		<updated>2018-02-28T15:07:07Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Generelles Problem mit Jar-Dateien */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
 [/]&lt;br /&gt;
  |__[META-INF]&lt;br /&gt;
  |    |__ MANIFEST.MF&lt;br /&gt;
  |&lt;br /&gt;
  |__[mypackage]&lt;br /&gt;
       |__ Main.class&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
&lt;br /&gt;
 Manifest-Version: 1.0&lt;br /&gt;
 Main-Class: mypackage.Main&lt;br /&gt;
 &amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&lt;br /&gt;
 Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
 *Ist eine aktuelle JRE installiert? Ältere JREs starten Code von neueren Compilern nicht.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java-Programm nur einmal starten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7592</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7592"/>
		<updated>2018-02-28T14:59:53Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Aufbau und Inhalt von META-INF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
 [/]&lt;br /&gt;
  |__[META-INF]&lt;br /&gt;
  |    |__ MANIFEST.MF&lt;br /&gt;
  |&lt;br /&gt;
  |__[mypackage]&lt;br /&gt;
       |__ Main.class&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
&lt;br /&gt;
 Manifest-Version: 1.0&lt;br /&gt;
 Main-Class: mypackage.Main&lt;br /&gt;
 &amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&lt;br /&gt;
 Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java-Programm nur einmal starten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7591</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7591"/>
		<updated>2018-02-28T14:59:00Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Aufbau und Inhalt von META-INF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
 [/]&lt;br /&gt;
  |__[META-INF]&lt;br /&gt;
  |    |__ MANIFEST.MF&lt;br /&gt;
  |&lt;br /&gt;
  |__[mypackage]&lt;br /&gt;
       |__ Main.class&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
 Manifest-Version: 1.0&lt;br /&gt;
 Main-Class: mypackage.Main&lt;br /&gt;
 &amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&amp;lt;code=ini&amp;gt;&lt;br /&gt;
Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&amp;lt;/code=ini&amp;gt;&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java-Programm nur einmal starten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7590</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7590"/>
		<updated>2018-02-28T14:58:06Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Aufbau und Inhalt von META-INF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
 [/]&lt;br /&gt;
  |__[META-INF]&lt;br /&gt;
  |    |__ MANIFEST.MF&lt;br /&gt;
  |&lt;br /&gt;
  |__[mypackage]&lt;br /&gt;
       |__ Main.class&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
&amp;lt;code=ini&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Main-Class: mypackage.Main&lt;br /&gt;
&amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
&amp;lt;/code=ini&amp;gt;&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&amp;lt;code=ini&amp;gt;&lt;br /&gt;
Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&amp;lt;/code=ini&amp;gt;&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java-Programm nur einmal starten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7589</id>
		<title>Jar-Datei mit Doppelklick nicht ausführbar?</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F&amp;diff=7589"/>
		<updated>2018-02-28T14:57:15Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Jar-Datei in der Eingabeaufforderung/Terminal starten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jar-Dateien (&#039;&#039;&#039;J&#039;&#039;&#039;ava &#039;&#039;&#039;Ar&#039;&#039;&#039;chive) sind prinzipiell im Zip-Format komprimierte Dateien, die aber durch spezielle Inhalte erweitert wurden. Per Doppelklick können von der [[JVM]] die in ihnen verpackten Java-Anwendungen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Du hast eine [[JAR-Datei]] erzeugt oder erhalten und diese lässt sich nicht per Doppelklick starten? Lösungen zu diesem Problem werden wir im Folgenden besprechen.&lt;br /&gt;
&lt;br /&gt;
=Anwendung oder Bibliothek?=&lt;br /&gt;
Jar-Dateien fassen in sich geschlossene Anwendungen oder Bibliotheken (Library) zusammen. Während Bibliotheken nicht ausführbar sind und dazu dienen Funktionalität für ein Programm bereit zu stellen, sind Anwendungen, die in Jar-Dateien gespeichert sind durchaus per Doppelklick ausführbar. &lt;br /&gt;
&lt;br /&gt;
Ist die Jar-Datei nicht per Doppelklick ausführbar, liegt möglicherweise eine Bibliothek vor. Um das zu prüfen, sieht man sich kurzerhand den Inhalt der Jar-Datei mit einem Packprogramm an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundsätzlich müssen wir uns zu aller erst folgende Frage stellen:&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;Ist es nur diese Jar-Datei, die ich nicht starten kann, oder sind alle Jar-Dateien betroffen?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Problem mit einer bestimmten Jar-Datei=&lt;br /&gt;
&lt;br /&gt;
==Jar-Datei in der Eingabeaufforderung/Terminal starten==&lt;br /&gt;
Um zu testen, ob eine Jar-Datei zumindest fehlerfrei auf der Kommandozeile starten kann, wird folgender Befehl eingegeben:&lt;br /&gt;
 java -jar MeinJar.jar&lt;br /&gt;
&#039;&#039;MeinJar.jar&#039;&#039; bezeichnet dabei die auszuführende Jar-Datei. Zum Aufruf muss man sich bereits in dem Verzeichnis befinden, in welchem die Jar-Datei gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Sollte es ein Problem mit der Jar-Datei geben, das die Ausführung verhindert, wird eine Fehlermeldung auf der Console/Eingabeaufforderung/Terminal ausgegeben.&lt;br /&gt;
 &#039;&#039;&#039;Der erste Schritt bei Problemen mit Jar-Dateien sollte also immer sein, zu sehen, ob bei der Ausführung Fehler auf der Console ausgegeben werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Aufbau und Inhalt von META-INF==&lt;br /&gt;
Damit eine Jar-Datei ausführbar wird, enthält sie, wie bereits oben beschrieben, weitere spezielle Inhalte, die von der JVM ausgelesen und verarbeitet werden können. Im Wesentlichen handelt es sich dabei um das Verzeichnis &#039;&#039;META-INF&#039;&#039; bzw. um seinen Inhalt. In diesem Verzeichnis muss die [https://wiki.byte-welt.net/wiki/JAR-Datei#MANIFEST.MF Manifest-Datei] enthalten sein. Das Verzeichnis META-INF selbst liegt im Wurzelverzeichnis der Jar-Datei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=ini&amp;gt;&lt;br /&gt;
[/]&lt;br /&gt;
 |__[META-INF]&lt;br /&gt;
 |    |__ MANIFEST.MF&lt;br /&gt;
 |&lt;br /&gt;
 |__[mypackage]&lt;br /&gt;
      |__ Main.class&lt;br /&gt;
&amp;lt;/code=ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Manifest-Datei enthält eine Reihe von Informationen, die der Interpreter für die Ausführung einer Java-Anwendung benötigt.&lt;br /&gt;
&lt;br /&gt;
In der Manifest-Datei müssen, damit eine Java-Anwendung per Jar-Datei ausführbar wird, mindestens folgende Angaben enthalten sein:&lt;br /&gt;
&amp;lt;code=ini&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Main-Class: mypackage.Main&lt;br /&gt;
&amp;lt;Leerzeile&amp;gt;&lt;br /&gt;
&amp;lt;/code=ini&amp;gt;&lt;br /&gt;
Hinter Main-Class verbirgt sich die [[Klasse]], die die main()-[[Methode]] enthält und damit die Anwendung starten kann. Die Klasse heißt &#039;&#039;Main.class&#039;&#039; und liegt in diesem (obigen) Beispiel im [[Package]] &#039;&#039;mypackage&#039;&#039;.&lt;br /&gt;
 &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Ohne eine Leerzeile am Ende der Manifest-Datei wird die Jar-Datei nicht per Mausklick ausführbar sein!&lt;br /&gt;
Dieser Fehler tritt oft nur auf, wenn man die Jar-Datei manuell in der Eingabeaufforderung/Terminal erzeugt hat und die Leerzeile vergessen wurde. Eigentlich alle großen Java-[[IDE|IDEs]] können ausführbare Jar-Dateien erzeugen und werden diesen Part richtig machen.&lt;br /&gt;
&lt;br /&gt;
Wenn wir externe Bibliotheken, wie bspw. einen Datenbanktreiber oder ein [[LookAndFeel]] in unserem Programm benutzen, müssen diese entsprechend im Manifest unserer Jar-Datei eingebunden sein.&lt;br /&gt;
&amp;lt;code=ini&amp;gt;&lt;br /&gt;
Class-Path: ./db/database.jar ./laf/look-and-feel.jar&lt;br /&gt;
&amp;lt;/code=ini&amp;gt;&lt;br /&gt;
Daher müsste die Zeile &#039;&#039;&#039;Class-Path:&#039;&#039;&#039; in der Manifest-Datei enthalten sein. In unserem Beispiel sind die eingebundenen Bibliotheken in verschiedenen Verzeichnissen relativ zu unserer Jar-Datei abgelegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Datenbanktreiber liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;db&#039;&#039;. Die Bibliothek des eingesetzten LookAndFeel liegt, ausgehend vom Verzeichnis unserer Jar-Datei, eine Verzeichnisebene tiefer, im Verzeichnis &#039;&#039;laf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn die Bibliotheken für den Java-[[Interpreter]] nicht in den in unserer Manifest-Datei bezeichneten Verzeichnissen zu finden sind, wird ein Fehler auf der Console ausgegeben werden und unsere Jar-Datei ist möglicherweise nicht ausführbar.&lt;br /&gt;
&lt;br /&gt;
=Generelles Problem mit Jar-Dateien=&lt;br /&gt;
Es gibt in allen Betriebssystemen Konstellationen, die verhindern, dass eine Jar-Datei nach einem (Doppel-)Klick mit der Maus auf das Dateisymbol startet.&lt;br /&gt;
&lt;br /&gt;
Bei vielen Linux-Distributionen ist bspw. die Jar-Datei mit einem Archivierungsprogramm verknüpft, so dass der Inhalt der Jar-Datei angezeigt wird, statt dass sie gestartet wird.&lt;br /&gt;
==Verknüpfung mit dem Java-Interpreter==&lt;br /&gt;
Bei Einsatz bestimmter Komprimierungs- bzw. Archivierungsprogramme, wie bspw. [http://www.winrar.de/ WinRar] oder [http://www.7-zip.org/ 7Zip], kommt es gelegentlich aufgrund falscher Programmeinstellungen vor, dass diese Programme statt der gewünschten Jar-Datei beim Doppelklick auf eine Jar-Datei gestartet werden. Statt die Jar-Datei der JVM zu überlassen, leitet das [[Betriebssystem]] den Aufruf an das Packprogramm weiter, welches nun den Inhalt der Jar-Datei anzeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
In den Einstellungen der Programme sollte nun zur Fehlerbehebung der Haken zum Öffnen von Jar-Dateien entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Systemeinstellungen seines Linux-Systems nicht ändern möchte, kann man einen [[Programmstarter für Java-Programme anlegen]]. Der Doppelklick auf das angelegte Symbol startet dann das Java-Programm.&lt;br /&gt;
&lt;br /&gt;
===Interpreter-Typen===&lt;br /&gt;
Es gibt zwei verschiedene Java-Interpreter. Zumindest unter [[Windows]]. Unter [[Linux]] gibt es nur einen [[JRE|Interpreter]], dem einerseits in der [[Kommandozeile]] auszuführende Java-Programme übergeben werden können. Andererseits kann man in Linux auch Einstellungen im System festmachen, die dann eine [[JAR-Datei|Jar-Datei]] mit Doppelklick, ohne Console starten können.&lt;br /&gt;
&lt;br /&gt;
Unter Windows wurden den Interpretern 2 Einsatzzwecke zugedacht. Will man ein Java-Programm auf der Kommandozeile starten, wird &amp;lt;code&amp;gt;java.exe&amp;lt;/code&amp;gt; eingesetzt. Dieser Interpreter erzeugt Ausgaben auf der Java-Console bzw. auf der Kommandozeile, so dass bspw. [[Exception (Java)|Java-Fehlermeldungen]] oder Textausgaben, die im Programm mit &amp;lt;code&amp;gt;System.out.println()&amp;lt;/code&amp;gt; erzeugt wurden, auf der Kommandozeile landen.&lt;br /&gt;
&lt;br /&gt;
Wenn man Java-Programme starten möchte, die eine Benutzeroberfläche ([[GUI]]) haben, (ohne dass sich eine Consolen öffnet) benutzt man unter [[Windows]] &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt;. Dieser Interpreter unterdrückt den Start der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Für Programmstarts per Doppelklick sollte also die Verknüpfung in der Windows-Registry auf &amp;lt;code&amp;gt;javaw.exe&amp;lt;/code&amp;gt; gesetzt sein. Im folgenden Kapitel gehen wir näher darauf ein.&lt;br /&gt;
&lt;br /&gt;
===Spezialfall Windows===&lt;br /&gt;
[[Datei:ExtMan_Dateiendungen.PNG|mini|Schritt 3 - Dateiendung suchen]]&lt;br /&gt;
[[Datei:ExtMan_Erweiterung_bearbeiten.PNG|mini|Schritt 5 - Erweiterung bearbeiten]]&lt;br /&gt;
[[Datei:ExtMan_Pfad_zur_JRE.PNG|mini|Schritt 7 - Pfad zur JRE festlegen]]&lt;br /&gt;
Unter Windows kann es passieren, dass die richtige Verknüpfung von JRE und Jar-Datei durch falsche Einstellungen oder versehentliches Neuverknüpfen zerstört wird. Jar-Dateien starten dann auch nicht mehr per Doppelklick. &lt;br /&gt;
&lt;br /&gt;
Das manuelle Beheben des Fehlers durch Eingriff in die Registry gestaltet sich inzwischen mit unter als nicht so trivial, weil mit jeder neuen Windows-Version sich die Struktur der Registry geändert hat. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des kleinen Tools &#039;&#039;&#039;ExtMan&#039;&#039;&#039; lässt sich das Problem jedoch auf jedem Windows-System prüfen und ggf. reparieren.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Herunterladen des Programms [https://www.google.de/search?q=extman ExtMan]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Entpacken und Ausführen des Tools.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; In der Liste der auf dem System registrierten Dateiendungen &#039;&#039;.jar&#039;&#039; suchen und markieren/selektieren&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Auf der rechten Seite den Button &#039;&#039;Erweiterung bearbeiten&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Im Bearbeitungsdialog sollte nun bereits die Aktion &#039;&#039;open&#039;&#039; eingetragen sein. Dieser ist nun zu markieren/selektieren. Sollte die Aktion nicht existieren, muss sie angelegt werden. Dazu klicken wir auf &#039;&#039;Neue Aktion&#039;&#039;, geben &lt;br /&gt;
&#039;&#039;open&#039;&#039; ein und bestätigen. Anschließend sollte der Bearbeitungsdialog so aussehen, wie im obigen Bild.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; Dieser Eintrag wird nun bearbeitet. Dazu klicken wir auf den Button &#039;&#039;Bearbeiten&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Im unteren Textfeld muss der richtige Pfad zur installierten JRE, sowie einige Platzhalter eingetragen sein bzw. werden. Wir prüfen also auf unserem System zunächst, ob der Pfad zur JRE stimmt. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Der hier beispielhafte Pfad sollte so in etwa aussehen: &amp;lt;code&amp;gt;&amp;quot;C:\Program Files (x86)\Java\jre1.8.0_151\bin\javaw.exe&amp;quot; -jar &amp;quot;%1&amp;quot; %*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 9:&#039;&#039;&#039; Die Eingabe wird nun mit Klick auf &#039;&#039;Speichern&#039;&#039; übernommen. Auch im jetzt wieder sichtbaren Bearbeitungsdialog bestätigen wir unsere Änderungen mit &#039;&#039;Speichern&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Schritt 10:&#039;&#039;&#039; Windows muss nun neu gestartet werden, damit die Änderungen in der Registry aktiviert werden. Anschließend sollten Jar-Programme wieder mit Doppelklick ausführbar sein.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen auf der Java-Console=&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Failed to load main class&amp;quot;==&lt;br /&gt;
Wenn der Interpreter aus irgendeinem Grund die Start-Klasse ([[Klasse]] mit der main()-[[Methode]]) nicht laden kann, gibt er diese Fehlermeldung aus: &amp;quot;Failed to load main class&amp;quot;&lt;br /&gt;
Die Ursachen dafür können recht vielfältig sein. Z.B. ein Fehler in der Manifest-Datei. (Siehe [https://wiki.byte-welt.net/wiki/Jar-Datei_mit_Doppelklick_nicht_ausf%C3%BChrbar%3F#Aufbau_und_Inhalt_von_META-INF Aufbau und Inhalt von META-INF])&lt;br /&gt;
&lt;br /&gt;
==NoClassDefFoundError==&lt;br /&gt;
Wenn eine Klasse beim Kompilieren noch gefunden wurde, aber zur Laufzeit nicht mehr, kommt es zu einem {{JAPI|NoClassDefFoundError}}.&lt;br /&gt;
&lt;br /&gt;
==ClassNotFoundException==&lt;br /&gt;
Dieser Fehler deutet auf ein Problem beim Laden einer Klasse hin. Sie z.B. tritt auf, wenn der {{JAPI|ClassLoader}} eine [[Klasse|Klassendatei]] nicht finden konnte. Nicht alle, in der [[JAR-Datei|Jar-Datei]] gespeicherten Klassen sind im Classpath.&lt;br /&gt;
&lt;br /&gt;
==NullPointerExecption==&lt;br /&gt;
Auch oft anzutreffen, die [[NullPointerException]]. Dieser Ausnahmefehler ist oft auf der Console zu sehen, wenn bspw. eingebundene Resourcen, wie Bilder nicht gefunden wurden und daher Objekte nicht initialisiert werden konnten. Natürlich auch dann, wenn [[Referenz|Referenzen]] auf [[Objekt|Objekte]] noch auf &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Java-Programme starten - Möglichkeiten]]&lt;br /&gt;
*[[Java-Programm nur einmal starten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=7588</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=7588"/>
		<updated>2018-02-28T14:46:45Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Willkommen --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:50px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Willkommen im Byte-Welt-Wiki&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:100%; border-top:0px; padding:10px; text-align:left&amp;quot;&amp;gt;Das Byte-Welt-Wiki ist ein Projekt zum Aufbau einer IT-Enzyklopädie aus freien Inhalten. Jeder kann mit seinem Wissen beitragen und somit helfen, Wissen zu vermitteln und zu bewahren. Gute Autorinnen und Autoren sind stets willkommen, um dieses Projekt schrittweise aufzubauen, zu erweitern und zu verbessern.&lt;br /&gt;
Um am Byte-Welt-Wiki mitzuwirken, ist aus Spamschutzgründen eine [http://forum.byte-welt.net/register.php Registrierung] im [http://forum.byte-welt.net/  Byte-Welt-Forum] erforderlich. Mit den persönlichen Zugangsdaten des Forums dürfen dann auch Beiträge im Wiki erstellt oder geändert werden.&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Autor des Monats --&amp;gt;&amp;lt;!-- Tipp --&amp;gt;&amp;lt;!-- Newsflash --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:50px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;!--&amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; background-color:#2C4051&amp;quot;&amp;gt;Autor/-in des Monats&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Tipp&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Newsflash&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!--&amp;lt;td style=&amp;quot;border-left:1px solid #2C4051; border-right:1px solid #2C4051; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Pokal.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;I&#039;&#039;&#039;n diesem Monat wurden folgende Autoren für gute Arbeit im Wiki ausgezeichnet:&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Gluehbirne.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt; &#039;&#039;&#039;F&#039;&#039;&#039;ür das schnelle Navigieren im Wiki bitte das [[Inhalt|Inhaltsverzeichnis]] nutzen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Newsflash.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;News aus dem Byte-Welt Themenbereich&#039;&#039;&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;!--&amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #000; width:30%; border-top:0px; padding:5px&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[Benutzer:AndreUhres|AndreUhres]], [[Benutzer:SeannWilliamScott|SeannWilliamScott]]&amp;lt;br/&amp;gt;mehr dazu [[Auszeichnungen| hier..]]&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:20px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{{Neuer Artikel}}&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
        Java 9.0.4 veröffentlicht! [http://java.sun.com/javase/downloads/index.jsp]&lt;br /&gt;
        Java 8 Update 162/162 veröffentlicht! [http://java.sun.com/javase/downloads/index.jsp]&lt;br /&gt;
        LibreOffice 6.0 [http://de.libreoffice.org/] veröffentlicht&lt;br /&gt;
        NetBeans 8.2 erschienen! [http://netbeans.org/downloads/index.html]&lt;br /&gt;
        Eclipse 4.6.2 (Neon) erschienen! [http://www.eclipse.org/downloads/]&lt;br /&gt;
        Linux Mint 18.3 &amp;quot;Sylvia&amp;quot; erschienen! [http://www.linuxmint.com/]&lt;br /&gt;
        Ubuntu 17.10 erschienen! [http://www.ubuntu.com]&lt;br /&gt;
        Debian 9.0 &amp;quot;Stretch&amp;quot; erschienen! [http://www.debian.com/]&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zufallsartikeln Nr1 + 2 --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Kategorien&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:48%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;tagcloud&amp;gt;&lt;br /&gt;
         min_count=5&lt;br /&gt;
       &amp;lt;/tagcloud&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=7587</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Hauptseite&amp;diff=7587"/>
		<updated>2018-02-28T14:46:04Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Willkommen --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:50px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Willkommen im Byte-Welt-Wiki&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:100%; border-top:0px; padding:10px; text-align:left&amp;quot;&amp;gt;Das Byte-Welt-Wiki ist ein Projekt zum Aufbau einer IT-Enzyklopädie aus freien Inhalten. Jeder kann mit seinem Wissen beitragen und somit helfen, Wissen zu vermitteln und zu bewahren. Gute Autorinnen und Autoren sind stets willkommen, um dieses Projekt schrittweise aufzubauen, zu erweitern und zu verbessern.&lt;br /&gt;
Um am Byte-Welt-Wiki mitzuwirken, ist aus Spamschutzgründen eine [http://forum.byte-welt.net/register.php Registrierung] im [http://forum.byte-welt.net/  Byte-Welt-Forum] erforderlich. Mit den persönlichen Zugangsdaten des Forums dürfen dann auch Beiträge im Wiki erstellt oder geändert werden.&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Autor des Monats --&amp;gt;&amp;lt;!-- Tipp --&amp;gt;&amp;lt;!-- Newsflash --&amp;gt;&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; style=&amp;quot;margin-bottom:50px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;!--&amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; background-color:#2C4051&amp;quot;&amp;gt;Autor/-in des Monats&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Tipp&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Newsflash&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!--&amp;lt;td style=&amp;quot;border-left:1px solid #2C4051; border-right:1px solid #2C4051; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Pokal.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;I&#039;&#039;&#039;n diesem Monat wurden folgende Autoren für gute Arbeit im Wiki ausgezeichnet:&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Gluehbirne.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;br/&amp;gt; &#039;&#039;&#039;F&#039;&#039;&#039;ür das schnelle Navigieren im Wiki bitte das [[Inhalt|Inhaltsverzeichnis]] nutzen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td style=&amp;quot;border-left:1px solid #000; border-right:1px solid #000; width:30%; text-align:left&amp;quot;&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Bild: Newsflash.png]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;News aus dem Byte-Welt Themenbereich&#039;&#039;&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;!--&amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #000; width:30%; border-top:0px; padding:5px&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[Benutzer:AndreUhres|AndreUhres]], [[Benutzer:SeannWilliamScott|SeannWilliamScott]]&amp;lt;br/&amp;gt;mehr dazu [[Auszeichnungen| hier..]]&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:20px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{{Neuer Artikel}}&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td style=&amp;quot;width:5%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:30%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
        Java 9.0.4 veröffentlicht! [http://java.sun.com/javase/downloads/index.jsp]&lt;br /&gt;
        Java 8 Update 162/162 veröffentlicht! [http://java.sun.com/javase/downloads/index.jsp]&lt;br /&gt;
        LibreOffice 6.0 [http://de.libreoffice.org/] veröffentlicht&lt;br /&gt;
        NetBeans 8.2 erschienen! [http://netbeans.org/downloads/index.html]&lt;br /&gt;
        Eclipse 4.6.2 (Neon) erschienen! [http://www.eclipse.org/downloads/]&lt;br /&gt;
        Linux Mint 18.3 &amp;quot;Sylvia&amp;quot; erschienen! [http://www.linuxmint.com/]&lt;br /&gt;
        Ubuntu 17.10 erschienen! [http://www.ubuntu.com]&lt;br /&gt;
        Debian 9.0 &amp;quot;Stretch&amp;quot; erschienen! [http://www.debian.com/]&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zufallsartikeln Nr1 + 2&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;0px&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td align=&amp;quot;center&amp;quot; style=&amp;quot;border:1px solid #2C4051; padding:10px; font-weight:bold; color:white; background-color:#2C4051&amp;quot;&amp;gt;Kategorien&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot; style=&amp;quot;border:1px solid #2C4051; width:48%; border-top:0px; padding:10px&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;tagcloud&amp;gt;&lt;br /&gt;
         min_count=5&lt;br /&gt;
       &amp;lt;/tagcloud&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; --&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7586</id>
		<title>4 Grundrechenarten auf der Kommandozeile</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7586"/>
		<updated>2018-02-27T15:23:15Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
Die hier vorgestellte Klasse CommandCalc berechnet das Ergebnis einer Grundrechenart-Operation mit zwei Operanden. Dabei erwartet sie die Teile der Rechenaufgabe als Argumente beim Start des Programms.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 java CommandCalc 3,2 x 5,8&lt;br /&gt;
Das Beispiel startet eine Multiplikation. Üblicherweise wird bei einer Multiplikation das Sternchen als Operator eingesetzt. Da das Sternchen aber auf den Kommandozeilen der bekannten Betriebssysteme bereits eine Wildcard-Funktion inne hat, benutzen wir ersatzweise das &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import static java.util.Locale.GERMANY;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * CommandCalc berechnet das Ergebnis einer Grundrechenart-Operation mit zwei Operanden.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class CommandCalc {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      if(args.length == 3 &amp;amp;&amp;amp; checkArgs(args)) {&lt;br /&gt;
         System.out.print(args[0] +&amp;quot; &amp;quot;+ args[1] +&amp;quot; &amp;quot;+ args[2] +&amp;quot; = &amp;quot;);&lt;br /&gt;
         switch(args[1]) {&lt;br /&gt;
            case &amp;quot;+&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, addition(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;-&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, subtraction(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;x&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, multiplication(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;/&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, division(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            default:&lt;br /&gt;
               System.out.println(&amp;quot;Unzulässiger Operator!&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         System.out.println();&lt;br /&gt;
      } else {&lt;br /&gt;
        System.out.println(&amp;quot;CommandCalc, 2015 - Gernot Segieth&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Zulässige Operatoren: + - x /&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Verwendungsbeispiel:\njava CommandCalc 5 + 8&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static boolean checkArgs(String[] args) {&lt;br /&gt;
      /*&lt;br /&gt;
       * Regex Erklärung:&lt;br /&gt;
       * - die zahl hat optional an erster Stelle ein negatives Vorzeichen&lt;br /&gt;
       * - darauf folgt mindestens eine Ziffer&lt;br /&gt;
       * - optional: (die Zahl darf einen Punkt oder Komma enthalten&lt;br /&gt;
       * - nach dem Punkt oder Komma endet die Zahl mit mindestens einer weiteren Ziffer)&lt;br /&gt;
       */&lt;br /&gt;
      String pattern = &amp;quot;^[-]?\\d+([.,]\\d+)?$&amp;quot;;&lt;br /&gt;
      return args[0].matches(pattern) &amp;amp;&amp;amp; args[2].matches(pattern);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double parse(String arg) {&lt;br /&gt;
      return Double.parseDouble(arg.replace(&#039;,&#039;, &#039;.&#039;));&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double addition(double arg1, double arg2) {&lt;br /&gt;
      return arg1 + arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private  static double subtraction(double arg1, double arg2) {&lt;br /&gt;
      return arg1 - arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double multiplication(double arg1, double arg2) {&lt;br /&gt;
      return arg1 * arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double division(double arg1, double arg2) {&lt;br /&gt;
      return arg1 / arg2;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;br /&gt;
[[Kategorie:Java-Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7585</id>
		<title>4 Grundrechenarten auf der Kommandozeile</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7585"/>
		<updated>2018-02-27T15:00:17Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import static java.util.Locale.GERMANY;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * CommandCalc berechnet das Ergebnis einer Rechenoperation mit zwei Operanden.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class CommandCalc {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      if(args.length == 3 &amp;amp;&amp;amp; checkArgs(args)) {&lt;br /&gt;
         System.out.print(args[0] +&amp;quot; &amp;quot;+ args[1] +&amp;quot; &amp;quot;+ args[2] +&amp;quot; = &amp;quot;);&lt;br /&gt;
         switch(args[1]) {&lt;br /&gt;
            case &amp;quot;+&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, addition(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;-&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, subtraction(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;x&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, multiplication(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;/&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, division(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            default:&lt;br /&gt;
               System.out.println(&amp;quot;Unzulässiger Operator!&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         System.out.println();&lt;br /&gt;
      } else {&lt;br /&gt;
        System.out.println(&amp;quot;CommandCalc, 2015 - Gernot Segieth&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Zulässige Operatoren: + - x /&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Verwendungsbeispiel:\njava CommandCalc 5 + 8&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static boolean checkArgs(String[] args) {&lt;br /&gt;
      /*&lt;br /&gt;
       * Regex Erklärung:&lt;br /&gt;
       * - die zahl hat optional an erster Stelle ein negatives Vorzeichen&lt;br /&gt;
       * - darauf folgt mindestens eine Ziffer&lt;br /&gt;
       * - optional: (die Zahl darf einen Punkt oder Komma enthalten&lt;br /&gt;
       * - nach dem Punkt oder Komma endet die Zahl mit mindestens einer weiteren Ziffer)&lt;br /&gt;
       */&lt;br /&gt;
      String pattern = &amp;quot;^[-]?\\d+([.,]\\d+)?$&amp;quot;;&lt;br /&gt;
      return args[0].matches(pattern) &amp;amp;&amp;amp; args[2].matches(pattern);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double parse(String arg) {&lt;br /&gt;
      return Double.parseDouble(arg.replace(&#039;,&#039;, &#039;.&#039;));&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double addition(double arg1, double arg2) {&lt;br /&gt;
      return arg1 + arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private  static double subtraction(double arg1, double arg2) {&lt;br /&gt;
      return arg1 - arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double multiplication(double arg1, double arg2) {&lt;br /&gt;
      return arg1 * arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double division(double arg1, double arg2) {&lt;br /&gt;
      return arg1 / arg2;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;br /&gt;
[[Kategorie:Java-Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7584</id>
		<title>4 Grundrechenarten auf der Kommandozeile</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7584"/>
		<updated>2018-02-27T14:59:56Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import static java.util.Locale.GERMANY;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * CommandCalc berechnet das Ergebnis einer Rechenoperation mit zwei Operanden.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class CommandCalc {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      if(args.length == 3 &amp;amp;&amp;amp; checkArgs(args)) {&lt;br /&gt;
         System.out.print(args[0] +&amp;quot; &amp;quot;+ args[1] +&amp;quot; &amp;quot;+ args[2] +&amp;quot; = &amp;quot;);&lt;br /&gt;
         switch(args[1]) {&lt;br /&gt;
            case &amp;quot;+&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, addition(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;-&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, subtraction(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;x&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, multiplication(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;/&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, division(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            default:&lt;br /&gt;
               System.out.println(&amp;quot;Unzulässiger Operator!&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         System.out.println();&lt;br /&gt;
      } else {&lt;br /&gt;
        System.out.println(&amp;quot;CommandCalc, 2015 - Gernot Segieth&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Zulässige Operatoren: + - x /&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Verwendungsbeispiel:\njava CommandCalc 5 + 8&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static boolean checkArgs(String[] args) {&lt;br /&gt;
      /*&lt;br /&gt;
       * Regex Erklärung:&lt;br /&gt;
       * - die zahl hat optional an erster Stelle ein negatives Vorzeichen&lt;br /&gt;
       * - darauf folgt mindestens eine Ziffer&lt;br /&gt;
       * - optional: (die Zahl darf einen Punkt oder Komma enthalten&lt;br /&gt;
       * - nach dem Punkt oder Komma endet die Zahl mit mindestens einer weiteren Ziffer)&lt;br /&gt;
       */&lt;br /&gt;
      String pattern = &amp;quot;^[-]?\\d+([.,]\\d+)?$&amp;quot;;&lt;br /&gt;
      return args[0].matches(pattern) &amp;amp;&amp;amp; args[2].matches(pattern);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double parse(String arg) {&lt;br /&gt;
      return Double.parseDouble(arg.replace(&#039;,&#039;, &#039;.&#039;));&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double addition(double arg1, double arg2) {&lt;br /&gt;
      return arg1 + arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private  static double subtraction(double arg1, double arg2) {&lt;br /&gt;
      return arg1 - arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double multiplication(double arg1, double arg2) {&lt;br /&gt;
      return arg1 * arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double division(double arg1, double arg2) {&lt;br /&gt;
      return arg1 / arg2;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;br /&gt;
[[Kategorie:Java Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7583</id>
		<title>4 Grundrechenarten auf der Kommandozeile</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=4_Grundrechenarten_auf_der_Kommandozeile&amp;diff=7583"/>
		<updated>2018-02-27T14:57:22Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: Die Seite wurde neu angelegt: „In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.  &amp;lt;code=java&amp;gt; import static java.util.Locale.GERMANY;  /**  * CommandCalc berechnet…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import static java.util.Locale.GERMANY;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * CommandCalc berechnet das Ergebnis einer Rechenoperation mit zwei Operanden.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Gernot Segieth&lt;br /&gt;
 */&lt;br /&gt;
public class CommandCalc {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      if(args.length == 3 &amp;amp;&amp;amp; checkArgs(args)) {&lt;br /&gt;
         System.out.print(args[0] +&amp;quot; &amp;quot;+ args[1] +&amp;quot; &amp;quot;+ args[2] +&amp;quot; = &amp;quot;);&lt;br /&gt;
         switch(args[1]) {&lt;br /&gt;
            case &amp;quot;+&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, addition(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;-&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, subtraction(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;x&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, multiplication(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            case &amp;quot;/&amp;quot;:&lt;br /&gt;
               System.out.format(GERMANY, &amp;quot;%f%n&amp;quot;, division(parse(args[0]), parse(args[2])));&lt;br /&gt;
               break;&lt;br /&gt;
            default:&lt;br /&gt;
               System.out.println(&amp;quot;Unzulässiger Operator!&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         System.out.println();&lt;br /&gt;
      } else {&lt;br /&gt;
        System.out.println(&amp;quot;CommandCalc, 2015 - Gernot Segieth&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Zulässige Operatoren: + - x /&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Verwendungsbeispiel:\njava CommandCalc 5 + 8&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static boolean checkArgs(String[] args) {&lt;br /&gt;
      /*&lt;br /&gt;
       * Regex Erklärung:&lt;br /&gt;
       * - die zahl hat optional an erster Stelle ein negatives Vorzeichen&lt;br /&gt;
       * - darauf folgt mindestens eine Ziffer&lt;br /&gt;
       * - optional: (die Zahl darf einen Punkt oder Komma enthalten&lt;br /&gt;
       * - nach dem Punkt oder Komma endet die Zahl mit mindestens einer weiteren Ziffer)&lt;br /&gt;
       */&lt;br /&gt;
      String pattern = &amp;quot;^[-]?\\d+([.,]\\d+)?$&amp;quot;;&lt;br /&gt;
      return args[0].matches(pattern) &amp;amp;&amp;amp; args[2].matches(pattern);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double parse(String arg) {&lt;br /&gt;
      return Double.parseDouble(arg.replace(&#039;,&#039;, &#039;.&#039;));&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double addition(double arg1, double arg2) {&lt;br /&gt;
      return arg1 + arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private  static double subtraction(double arg1, double arg2) {&lt;br /&gt;
      return arg1 - arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double multiplication(double arg1, double arg2) {&lt;br /&gt;
      return arg1 * arg2;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private static double division(double arg1, double arg2) {&lt;br /&gt;
      return arg1 / arg2;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7582</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7582"/>
		<updated>2018-02-25T10:31:05Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Am Beispiel Microsoft Windows XP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Microsoft Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png|350px|VirtualBox ohne virtuelle Betriebssysteme]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png|350px|VirtualBox: Neue virtuelle Maschine erstellen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png|350px|VirtualBox: Betriebssystem auswählen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png|350px|VirtualBox: Größe des zu verwendenden Hauptspeichers angegeben. Max 1/2 des verfügbaren RAM!]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png|350px|VirtualBox: Virtuelle Festplatte erzeugen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png|350px|]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png|350px|VirtualBox: Typ der Festplatte festlegen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png|350px|VirtualBox: Größe der virtuellen Festplatte angeben]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png|350px|VirtualBox: Zusammenfassung der Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png|350px|VirtualBox: Abgaben prüfen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png|350px|VirtualBox: Zusammenfassung der Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png|350px|VirtualBox: Fertig. Bereit zur Installation des Betriebssystems]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png|350px|VirtualBox: Installation von Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png|350px|VirtualBox: Frisch installiertes Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Desktop-Verknüpfung für ein Betriebssystem erzeugen=&lt;br /&gt;
[[Datei:VirtualBox_Desktop-Verknüpfung_erzeugen.png|thumb|350px|VirtualBox: Desktop-Verknüpfung erzeugen]]&lt;br /&gt;
Wie wir gesehen haben, kann der Start eines virtuellen Betriebssystems mit etwas Aufwand verbunden sein. Man kann aber auch eine Desktop-Verknüpfung anlegen, so dass das virtuelle Betriebssystem zentraler zu finden und schneller zu starten sein wird.&lt;br /&gt;
&lt;br /&gt;
Zunächst starten wir den &#039;&#039;&#039;VirtualBox Manager&#039;&#039;&#039;. Anschließend führen wir einen Rechtsklick auf das gewünschte Betriebssystem aus und wählen im sich öffnenden Kontextmenü den Menüpunkt &#039;&#039;&#039;Desktop-Verknüpfung erzeugen&#039;&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7581</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7581"/>
		<updated>2018-02-25T10:30:15Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Microsoft Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png|350px|VirtualBox ohne virtuelle Betriebssysteme]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png|350px|VirtualBox: Neue virtuelle Maschine erstellen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png|350px|VirtualBox: Betriebssystem auswählen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png|350px|VirtualBox: Größe des zu verwendenden Hauptspeichers angegeben. Max 1/2 des verfügbaren RAM!]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png|350px|VirtualBox: Virtuelle Festplatte erzeugen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png|350px|]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png|350px|VirtualBox: Typ der Festplatte festlegen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png|350px|VirtualBox: Größe der virtuellen Festplatte angeben]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png|350px|VirtualBox: Zusammenfassung der Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png|350px|VirtualBox: Abgaben prüfen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png|thumb|350px|VirtualBox: Zusammenfassung der Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png|thumb|350px|VirtualBox: Fertig. Bereit zur Installation des Betriebssystems]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png|thumb|350px|VirtualBox: Installation von Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png|thumb|350px|VirtualBox: Frisch installiertes Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Desktop-Verknüpfung für ein Betriebssystem erzeugen=&lt;br /&gt;
[[Datei:VirtualBox_Desktop-Verknüpfung_erzeugen.png|thumb|350px|VirtualBox: Desktop-Verknüpfung erzeugen]]&lt;br /&gt;
Wie wir gesehen haben, kann der Start eines virtuellen Betriebssystems mit etwas Aufwand verbunden sein. Man kann aber auch eine Desktop-Verknüpfung anlegen, so dass das virtuelle Betriebssystem zentraler zu finden und schneller zu starten sein wird.&lt;br /&gt;
&lt;br /&gt;
Zunächst starten wir den &#039;&#039;&#039;VirtualBox Manager&#039;&#039;&#039;. Anschließend führen wir einen Rechtsklick auf das gewünschte Betriebssystem aus und wählen im sich öffnenden Kontextmenü den Menüpunkt &#039;&#039;&#039;Desktop-Verknüpfung erzeugen&#039;&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7580</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7580"/>
		<updated>2018-02-25T10:24:19Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Am Beispiel Windows XP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Microsoft Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png|thumb|350px|VirtualBox ohne virtuelle Betriebssysteme]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png|thumb|350px|VirtualBox: Neue virtuelle Maschine erstellen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png|thumb|350px|VirtualBox: Betriebssystem auswählen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png|thumb|350px|VirtualBox: Größe des zu verwendenden Hauptspeichers angegeben. Max 1/2 des verfügbaren RAM!]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png|thumb|350px|VirtualBox: Virtuelle Festplatte erzeugen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png|thumb|350px|]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png|thumb|350px|VirtualBox: Typ der Festplatte festlegen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png|thumb|350px|VirtualBox: Größe der virtuellen Festplatte angeben]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png|thumb|350px|VirtualBox: Zusammenfassung der Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png|thumb|350px|VirtualBox: Abgaben prüfen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png|thumb|350px|VirtualBox: Zusammenfassung der Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png|thumb|350px|VirtualBox: Fertig. Bereit zur Installation des Betriebssystems]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png|thumb|350px|VirtualBox: Installation von Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png|thumb|350px|VirtualBox: Frisch installiertes Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Desktop-Verknüpfung für ein Betriebssystem erzeugen=&lt;br /&gt;
[[Datei:VirtualBox_Desktop-Verknüpfung_erzeugen.png|thumb|350px|VirtualBox: Desktop-Verknüpfung erzeugen]]&lt;br /&gt;
Wie wir gesehen haben, kann der Start eines virtuellen Betriebssystems mit etwas Aufwand verbunden sein. Man kann aber auch eine Desktop-Verknüpfung anlegen, so dass das virtuelle Betriebssystem zentraler zu finden und schneller zu starten sein wird.&lt;br /&gt;
&lt;br /&gt;
Zunächst starten wir den &#039;&#039;&#039;VirtualBox Manager&#039;&#039;&#039;. Anschließend führen wir einen Rechtsklick auf das gewünschte Betriebssystem aus und wählen im sich öffnenden Kontextmenü den Menüpunkt &#039;&#039;&#039;Desktop-Verknüpfung erzeugen&#039;&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Datei:VirtualBox_Desktop-Verkn%C3%BCpfung_erzeugen.png&amp;diff=7579</id>
		<title>Datei:VirtualBox Desktop-Verknüpfung erzeugen.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Datei:VirtualBox_Desktop-Verkn%C3%BCpfung_erzeugen.png&amp;diff=7579"/>
		<updated>2018-02-25T10:13:05Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7578</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7578"/>
		<updated>2018-02-25T10:11:23Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* =Desktop-Verknüpfung für ein Betriebssystem erzeugen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Desktop-Verknüpfung für ein Betriebssystem erzeugen=&lt;br /&gt;
[[Datei:VirtualBox_Desktop-Verknüpfung_erzeugen.png|thumb|350px|VirtualBox: Desktop-Verknüpfung erzeugen]]&lt;br /&gt;
Wie wir gesehen haben, kann der Start eines virtuellen Betriebssystems mit etwas Aufwand verbunden sein. Man kann aber auch eine Desktop-Verknüpfung anlegen, so dass das virtuelle Betriebssystem zentraler zu finden und schneller zu starten sein wird.&lt;br /&gt;
&lt;br /&gt;
Zunächst starten wir den &#039;&#039;&#039;VirtualBox Manager&#039;&#039;&#039;. Anschließend führen wir einen Rechtsklick auf das gewünschte Betriebssystem aus und wählen im sich öffnenden Kontextmenü den Menüpunkt &#039;&#039;&#039;Desktop-Verknüpfung erzeugen&#039;&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7577</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7577"/>
		<updated>2018-02-25T10:10:42Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Desktop-Verknüpfung für ein Betriebssystem erzeugen=&lt;br /&gt;
Wie wir gesehen haben, kann der Start eines virtuellen Betriebssystems mit etwas Aufwand verbunden sein. Man kann aber auch eine Desktop-Verknüpfung anlegen, so dass das virtuelle Betriebssystem zentraler zu finden und schneller zu starten sein wird.&lt;br /&gt;
&lt;br /&gt;
Zunächst starten wir den &#039;&#039;&#039;VirtualBox Manager&#039;&#039;&#039;. Anschließend führen wir einen Rechtsklick auf das gewünschte Betriebssystem aus und wählen im sich öffnenden Kontextmenü den Menüpunkt &#039;&#039;&#039;Desktop-Verknüpfung erzeugen&#039;&#039;&#039; aus.&lt;br /&gt;
[[Datei:VirtualBox_Desktop-Verknüpfung_erzeugen.png|thumb|350px|VirtualBox: Desktop-Verknüpfung erzeugen]]]&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7576</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7576"/>
		<updated>2018-02-25T10:08:24Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Tipps und Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Desktop-Verknüpfung für ein Betriebssystem erzeugen=&lt;br /&gt;
Wie wir gesehen haben, kann der Start eines virtuellen Betriebssystems mit etwas Aufwand verbunden sein. Man kann aber auch eine Desktop-Verknüpfung anlegen, so dass das virtuelle Betriebssystem zentraler zu finden und schneller zu starten sein wird.&lt;br /&gt;
&lt;br /&gt;
Zunächst starten wir den &#039;&#039;&#039;VirtualBox Manager&#039;&#039;&#039;. Anschließend führen wir einen Rechtsklick auf das gewünschte Betriebssystem aus und wählen im sich öffnenden Kontextmenü den Menüpunkt &#039;&#039;&#039;Desktop-Verknüpfung erzeugen&#039;&#039;&#039; aus.&lt;br /&gt;
[[Datei:VirtualBox_Desktop-Verknüpfung_erzeugen.png]]&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7575</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=VirtualBox&amp;diff=7575"/>
		<updated>2018-02-25T09:55:45Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: /* Inbetriebnahme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:VirtualBox (Windows).png|thumb|350px|VirtualBox unter Windows]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Unter Windows==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unter Linux (Debian/Ubuntu)==&lt;br /&gt;
Das Programm kann mit folgendem Konsolenbefehl installiert werden:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;([http://wiki.byte-welt.de/wiki/Software_installieren_(Ubuntu) Paket installieren])&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install virtualbox&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Unter Umständen kann es in älteren [[Ubuntu]]-Versionen zu Fehlermeldungen kommen, die auf das fehlende [[Paket]] libxalan110 verweisen.&lt;br /&gt;
Dann muss noch zuerst das Paket libxalan110 installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole: &#039;&#039;&#039;(Paket installieren)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo apt-get install libxalan110&amp;lt;/code=text&amp;gt;&lt;br /&gt;
Dabei werden zunächst benötigte Pakete heruntergeladen und gleich darauf installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://wiki.byte-welt.de/wiki/VirtualBox_(Ubuntu)#Inbetriebnahme Weiter geht&#039;s bei Inbetriebnahme].&lt;br /&gt;
&lt;br /&gt;
=Manueller Download=&lt;br /&gt;
&#039;&#039;&#039;Folgende Variante beschreibt die Installation nach manuellem Download der aktuellen Version&#039;&#039;&#039;&lt;br /&gt;
*Zunächst sollte die aktuellste VirtualBox Version für Linux [http://www.virtualbox.org/wiki/Downloads hier] heruntergeladen werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Das Paket ist im Format .deb verfügbar, das heißt es kann einfach mit Mausdoppelklick installiert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Inbetriebnahme=&lt;br /&gt;
Um möglichst viele Funktionen von VirtualBox nutzen zu können, sollten zur Inbetriebnahme einige Arbeiten nach der Installation durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&#039;&#039;&#039;Anpassungen nach der Installation&#039;&#039;&#039;&lt;br /&gt;
*Wenn VirtualBox fehlerfrei installiert wurde, müssen anschließend alle Benutzer, die VirtualBox benutzen dürfen zur Gruppe &#039;&#039;&#039;vboxusers&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
&#039;&#039;&#039;Terminal/Konsole:&#039;&#039;&#039; (Benutzer einer Gruppe hinzufügen)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo adduser benutzerkonto vboxusers&amp;lt;/code=text&amp;gt;&lt;br /&gt;
ODER auch&lt;br /&gt;
&amp;lt;code=text&amp;gt;sudo usermod -aG vboxusers $USER&amp;lt;/code=text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig! Wenn der aktuelle Benutzer bzw. der Benutzer, der mit VirtualBox arbeiten soll nicht der Benutzergruppe &#039;&#039;&#039;&#039;&#039;vboxusers&#039;&#039;&#039;&#039;&#039; hinzugefügt wird, können z.B. keine USB-Geräte in den virtuellen Betriebssystemen eingebunden werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Anschließend muss eine Ab- und Wiederanmeldung am System erfolgen.&lt;br /&gt;
*VirtualBox ist nun fertig eingerichtet und kann über Anwendungen -&amp;gt; Systemwerkzeuge oder in der Konsole mit dem Befehl &#039;&#039;&#039;virtualbox&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
=Installation eines virtuellen Betriebssystems=&lt;br /&gt;
==Am Beispiel Windows XP==&lt;br /&gt;
[[Datei: 1 VirtualBox Hauptfenster.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 2 Neue virtuelle Maschine erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 3 Virtuelle Maschine fuer Windows erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 4 Groesse des Hauptspeichers festlegen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 5 Virtuelle Festplatte zuweisen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 6 Neue virtuelle Festplatte erstellen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 7 Typ der Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 8 Groesse der neuen Festplatte.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 9 Zusammenfassung der Plattenerzeugung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 10 Angelegte Festpatte uebernehmen.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 11 Zusammenfassung.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: 12 OS fertig eingerichtet.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: Bildschirmfoto-Windows XP Laufend - VirtualBox OSE - Windows installiert.png]]&lt;br /&gt;
&lt;br /&gt;
=VBoxGuestAdditions=&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks=&lt;br /&gt;
==Virtuelle Festplatte nachträglich vergrößern==&lt;br /&gt;
In den meisten Fällen wird die ursprünglich angelegte Größe der virtuellen Festplatte (.vdi) früher oder später nicht mehr ausreichen.&lt;br /&gt;
&lt;br /&gt;
Dann kann mit dem mitgelieferten Tool VBoxManage die Größe nachträglich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl für Windows sieht so aus:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; -resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Linux ganz ähnlich:&lt;br /&gt;
 vboxmanage modifyhd &amp;lt;Pfad zur vdi-Datei&amp;gt; --resize &amp;lt;Neue Größe in MB&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Windows]]&lt;br /&gt;
[[Kategorie:Tutorials]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=FTP-Verzeichnis_ins_lokale_Dateisystem_einh%C3%A4ngen&amp;diff=7574</id>
		<title>FTP-Verzeichnis ins lokale Dateisystem einhängen</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=FTP-Verzeichnis_ins_lokale_Dateisystem_einh%C3%A4ngen&amp;diff=7574"/>
		<updated>2018-02-18T18:12:14Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: Die Seite wurde neu angelegt: „=Quelle= *[https://www.kotori.de/wissen/linux-ftp-verzeichnis-mounten.html FTP-Verzeichnis ins lokale Dateisystem einhängen]  Kategorie:Linux Kategorie:…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Quelle=&lt;br /&gt;
*[https://www.kotori.de/wissen/linux-ftp-verzeichnis-mounten.html FTP-Verzeichnis ins lokale Dateisystem einhängen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Debian]]&lt;br /&gt;
[[Kategorie:Ubuntu]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=AutofitTableColumns&amp;diff=7573</id>
		<title>AutofitTableColumns</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=AutofitTableColumns&amp;diff=7573"/>
		<updated>2018-02-17T15:28:16Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Breite von Tabellenspalten automatisch am Zelleninhalt anpassen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java-Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=AutofitTableColumns&amp;diff=7572</id>
		<title>AutofitTableColumns</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=AutofitTableColumns&amp;diff=7572"/>
		<updated>2018-02-17T15:26:36Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: Weiterleitung nach Breite von Tabellenspalten automatisch am Zelleninhalt anpassen erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Breite von Tabellenspalten automatisch am Zelleninhalt anpassen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Grafikdateien_laden_und_anzeigen_(Java)&amp;diff=7571</id>
		<title>Grafikdateien laden und anzeigen (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Grafikdateien_laden_und_anzeigen_(Java)&amp;diff=7571"/>
		<updated>2018-02-17T14:16:24Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:1em;font-size:1.125em;border-style:solid;border-color:#FABD23;border-width:1px;background-color:#F0F0F0;&amp;quot;&amp;gt;Häufig möchte man aus verschiedenen Gründen Grafikdateien, wie Icons, Eyecatcher oder Fotos in Java-Programme einbinden.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Folgenden soll anhand von Code-Beispielen gezeigt werden, wie unter verschiedenen Bedingungen und [[GUI]]-Schnittstellen ([[AWT]]/[[Swing]]) Grafiken eingebunden werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Dieses Tutorial versucht sämtliche Möglichkeiten und Sachverhalte vom Laden von Grafikdateien in Java näher zu beleuchten und geht dabei auch auf die Unterschiede zwischen AWT, Swing und JavaFX ein.&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Kleiner Pfad-Exkurs=&lt;br /&gt;
Das häufigste Problem, das von Einsteigern beschrieben wird, ist das Laden von Bildern aus verschiedensten Quellen und da besonders, die Einbindung über die URL oder den Pfad zum Bild.&lt;br /&gt;
Denn oft möchte man ein Bild laden, welches sich nicht im gleichen Verzeichnis wie die Bytecode-Datei befindet.&lt;br /&gt;
Die folgende kurze Einführung zeigt die Verwendung und die Schreibweisen der Angabe des Pfades zur Referenzierung von Grafikdateien.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein Pfad und wie ist er aufgebaut?==&lt;br /&gt;
Dateien sind innerhalb eines Dateisystems in Verzeichnissen (Ordnern) gespeichert. Man kann Ordner mit Kisten vergleichen, in denen Dinge bestimmter Kategorien gesammelt werden. Bilder würde man sicher auch in einer separaten Kiste sammeln, statt sie mit Versicherungsdokumenten oder Büchern zu mischen.&amp;lt;br&amp;gt;&lt;br /&gt;
Manchmal hat man in einer Bilderkiste auch weitere Kästchen, in denen Bilder zu einem ganz bestimmten Thema gesammelt sind. &lt;br /&gt;
&lt;br /&gt;
Ein Pfad beschreibt nun den genauen Speicherplatz einer Datei in einem Dateisystem. Dabei werden sämtliche Kisten und Kästchen aneinander gereiht, bis man das einzelne Bild aus der Kiste oder dem Kästchen entnehmen kann.&amp;lt;br&amp;gt;&lt;br /&gt;
Anders gesagt: beschreibt der Pfad den Weg, den man beschreiten muss, um zu einem bestimmten Ziel (hier ist es ein ganz bestimmtes Bild) zu gelangen.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
 /Schrank/Bilderkiste/Urlaubsfotos/Strandkorb.jpg&lt;br /&gt;
Diese Art des Pfades wird auch absoluter Pfad genannt, der Weg ist hier vom Start bis zum Ziel vollständig aufgeführt.&lt;br /&gt;
&lt;br /&gt;
==Absolute Pfadangaben==&lt;br /&gt;
Unter einem absoluten Pfad versteht man, ausgehend vom Wurzelverzeichnis, den genauen Speicherort einer Datei im Dateisystem.&lt;br /&gt;
&lt;br /&gt;
===Beispiel Windows===&lt;br /&gt;
Der absolute Pfad, um ein Bild auf der System-Festplatte unter Windows zu finden:&lt;br /&gt;
&amp;lt;code&amp;gt;c:\users\byte-welt\pictures\bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man das aber so im Java-Code einer [[Klasse]] schreibt, wird der [[Compiler]] die Backslashes monieren. Der Backslash dient in Java zur Maskierung von Zeichen, die in Java selbst bereits eine Bedeutung haben.&amp;lt;br&amp;gt;&lt;br /&gt;
Daher kann man den Pfad nun so schreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;c:\\users\\byte-welt\\pictures\\bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise wird aber nur unter Windows-Systemen ausführbar sein, andere Betriebssysteme werden nichts laden können.&lt;br /&gt;
&lt;br /&gt;
Daher ist der absolute Pfad (abgesehen vom Laufwerksbuchstaben) in Java-Code am besten immer so zu schreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;c:/users/byte-welt/pictures/bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Compiler wird dann nichts mehr bemängeln und die JRE wird das Zeichen zur Pfadtrennung immer für das jeweilige Betriebssystem richtig setzen.&lt;br /&gt;
&lt;br /&gt;
===Beispiel Linux===&lt;br /&gt;
Der absolute Pfad, um ein Bild auf der Festplatte (/home-Partition) unter Linux zu finden:&lt;br /&gt;
&amp;lt;code&amp;gt;/home/byte-welt/pictures/bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiel Internet===&lt;br /&gt;
Der absolute Pfad, um ein Bild von einem Webspace aus dem Internet zu laden:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://byte-welt.net/pictures/bild.png&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Relative Pfadangaben==&lt;br /&gt;
Unter einem relativen Pfad versteht man einen bekannten Teil des (möglicherweise unbekannten) absoluten (gesamten, existierenden) Pfades zu Dateien im Dateisystem.&amp;lt;br&amp;gt;&lt;br /&gt;
Es geht hier also um den Speicherort einer Datei, ausgehend von dem Punkt im Dateisystem, an dem man sich gerade befindet. Man muss also gar nicht genau wissen, wo sich die gewünschte Datei im Dateisystem befindet. Es genügt, zu wissen, wie man vom aktuellen &amp;quot;Standort&amp;quot; aus dort hin gelangt.&lt;br /&gt;
&lt;br /&gt;
Der aktuelle Standort wird mit einem Punkt symbolisiert. Zwei aufeinander folgende Punkte symbolisieren ein Verzeichnis über dem aktuellen Verzeichnis. Im Pfad bedeutet das, man geht einen Schritt zurück.&amp;lt;br&amp;gt;&lt;br /&gt;
Die jeweiligen Verzeichnisse werden mit einem Slash (unter Unix-Systemen) oder einem Backslash (unter Windows) getrennt.&lt;br /&gt;
&lt;br /&gt;
===Bilder im Verzeichnis der einbettenden Klasse===&lt;br /&gt;
&amp;lt;code&amp;gt;bild.png&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;./bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bilder eine Verzeichnisebene tiefer===&lt;br /&gt;
&amp;lt;code&amp;gt;inhalt/bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zwei Ebenen tiefer:&lt;br /&gt;
&amp;lt;code&amp;gt;inhalt/bilder/bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bilder eine Verzeichnisebene höher===&lt;br /&gt;
&amp;lt;code&amp;gt;../bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zwei Ebenen höher:&lt;br /&gt;
&amp;lt;code&amp;gt;../../bild.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zwei Ebenen höher mit anschließendem Wechsel in ein anderes darunter liegendes Verzeichnis:&lt;br /&gt;
&amp;lt;code&amp;gt;../../audio/soundcheck.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Laden von Grafikdateien im AWT=&lt;br /&gt;
Im AWT, welches die Standard-Schnittstelle für die Entwicklung grafischer Benutzeroberflächen bis zur Veröffentlichung von Java 1.2 war, wird das Einlesen von Grafikdaten in [[Applet]]s und Applikationen unterschiedlich gehandhabt. Bis auf den gleichen Namen der benutzten [[Methode]] zum Einlesen, müssen hier verschiedene Konzepte angewendet werden. Das führt oft zu Verwirrung und Vorgehensweisen, die unnötig sind.&lt;br /&gt;
&lt;br /&gt;
==Applets==&lt;br /&gt;
&lt;br /&gt;
===Laden von Bildern in Applets===&lt;br /&gt;
Da Applets auf einem [[Webserver]] gespeichert sind und nach dem Laden in den [[Browser]] externe Resourcen wie Bilder ebenfalls aus dem Internet nachladen, werden die URLs (Quellenanzeiger) der Resourcen meist ausgehend vom URL des Applets angegeben. Das heißt: getCodeBase() liefert den URL des Applets im Internet bzw. Netzwerk. Und davon ausgehend kann nun der exakte [[Pfad]] zu unserem Bild angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
Image image1 = getImage(getCodeBase(),&amp;quot;Bild1.jpg&amp;quot;); //Das Bild liegt hier im gleichen Verzeichnis, wie das Applet.&lt;br /&gt;
&lt;br /&gt;
Image image2 = getImage(getCodeBase(),&amp;quot;../Bild2.jpg&amp;quot;); //Das Bild liegt hier im Verzeichnis über dem Applet.&lt;br /&gt;
&lt;br /&gt;
Image image3 = getImage(getCodeBase(),&amp;quot;bilder/Bild3.jpg&amp;quot;); //Das Bild liegt hier vom Applet ausgehend in einem Unterverzeichnis bilder.&lt;br /&gt;
&lt;br /&gt;
Image image4 = getImage(new URL(&amp;quot;http://www.meine-domain.de/bilder/Bild3.jpg&amp;quot;)); //Nicht erlaubt! Wirft eine AccessControlException.&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Beim Programmieren sollte darauf geachtet werden, dass generell Slashes (also &#039;&#039;&#039;/&#039;&#039;&#039;) als Pfadseparatoren verwendet werden. Auch unter Windows! Sonst müsste jeder Pfadseparator escaped werden, was wieder zu einer Plattformabhängigkeit führt.&lt;br /&gt;
&lt;br /&gt;
===Einfache Applet-Klasse===&lt;br /&gt;
Die einfachste Variante, eine Grafik in ein Applet (AWT) einzubinden ist, sie von der URL einzulesen und in der paint()-Methode direkt auf die Appletfläche zu zeichnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;import java.awt.*;&lt;br /&gt;
import java.applet.*;&lt;br /&gt;
&lt;br /&gt;
public class PictureApplet extends Applet {&lt;br /&gt;
   private Image image;&lt;br /&gt;
&lt;br /&gt;
   public void init() {&lt;br /&gt;
      image = getImage(getCodeBase(),&amp;quot;Bild.jpg&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void paint(Graphics g) {&lt;br /&gt;
      super.paint(g);&lt;br /&gt;
      if(image != null) {&lt;br /&gt;
         g.drawImage(image, 0, 0, this);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Variante ist aber wenig effizient und häufig kommt es vor, dass kein Bild ausgegeben wird, obwohl der URL und der Pfad zum Bild stimmen.&lt;br /&gt;
Das Einlesen des Bildes dauert hier bei größeren und/oder mehreren Dateien etwas länger, so dass die paint()-Methode schon ausgeführt wird, obwohl das Laden des Bildes noch nicht abgeschlossen ist.&lt;br /&gt;
In der Java-Konsole würde in diesem Fall eine NullPointerException ausgegeben werden, wenn &#039;&#039;&#039;image&#039;&#039;&#039; nicht auf &#039;&#039;null&#039;&#039; geprüft werden würde.&lt;br /&gt;
Wegen der Prüfung, stürzt das Programm in dem Fall nicht ab, es zeichnet aber u. U. auch kein Bild.&lt;br /&gt;
Um sicherzustellen, dass das Bild fertig geladen ist, bevor die Zeichenroutine angestoßen wird, wird der Einsatz der Klasse [http://wiki.byte-welt.net/wiki/Grafikdateien_laden_und_anzeigen#Einsatz_des_MediaTrackers MediaTracker] empfohlen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einsatz des MediaTrackers==&lt;br /&gt;
Um sicher zu stellen, dass ein Bild erst dann auf eine AWT-Anwendung gezeichnet wird, wenn es wirklich vollständig geladen wurde, bedient man sich der Klasse [http://docs.oracle.com/javase/7/docs/api/java/awt/MediaTracker.html java.awt.MediaTracker], welche das Laden der Dateien in einem extra [[Thread]] überwacht und die Kontrolle ans Programm zurückgibt, wenn die Bilder geladen wurden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;code=java&amp;gt;import java.awt.*;&lt;br /&gt;
import java.applet.*;&lt;br /&gt;
&lt;br /&gt;
public class PictureApplet extends Applet {&lt;br /&gt;
   private Image image;&lt;br /&gt;
   private MediaTracker tracker;&lt;br /&gt;
&lt;br /&gt;
   public void init() {&lt;br /&gt;
      tracker = new MediaTracker(this);&lt;br /&gt;
&lt;br /&gt;
      image = getImage(getCodeBase(),&amp;quot;Bild.jpg&amp;quot;); //Laden des Bildes anstoßen&lt;br /&gt;
&lt;br /&gt;
      tracker.addImage(image, 0); //Image an den MediaTracker zur Überwachung übergeben&lt;br /&gt;
&lt;br /&gt;
      try {&lt;br /&gt;
         tracker.waitForAll(); //auf alle zu ladenden Dateien warten&lt;br /&gt;
      }&lt;br /&gt;
      catch (InterruptedException e) {&lt;br /&gt;
         e.printStackTrace(); //Fehlerausgabe auf der Java-Konsole&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void paint(Graphics g) {&lt;br /&gt;
      super.paint(g);&lt;br /&gt;
      if(image != null) {&lt;br /&gt;
         g.drawImage(image, 0, 0, this);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Auch hier, liegt das Bild im gleichen Verzeichnis, wie das Applet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Vorgehensweise bei der Benutzung von MediaTracker in Applikationen ist die gleiche, nur dass Bilder dort mit der getImage()-Methode aus [http://docs.oracle.com/javase/7/docs/api/java/awt/Toolkit.html java.awt.Toolkit] geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==AWT-Applikationen==&lt;br /&gt;
&lt;br /&gt;
===Laden von Bildern für AWT-Applikationen===&lt;br /&gt;
Anwendungen, welche das AWT als GUI-Schnittstelle anwenden, greifen auf die Klasse java.awt.Toolkit zurück, um Bilder zu laden&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
Image image = Toolkit.getDefaultToolkit().getImage(&amp;quot;picture.jpg&amp;quot;);&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Genau wie bei Applets muss hier damit gerechnet werden, dass u. U. das Bilder nicht gezeichnet wird, obwohl der Pfad zum Bild stimmt. Stattdessen erhält man eine [[NullPointerException]] (siehe [[Was ist eine Exception?]]).&lt;br /&gt;
Auch hier empfiehlt sich zusätzlich der Einsatz von [http://wiki.byte-welt.net/wiki/Grafikdateien_laden_und_anzeigen#Einsatz_des_MediaTrackers MediaTracker], um sicherzustellen, dass das Bild im Speicher ist, bevor die Zeichenroutine angestoßen wird.&lt;br /&gt;
&lt;br /&gt;
===Ausgabe von Bildern in GUI-Komponenten===&lt;br /&gt;
Die meisten GUI-Komponenten des AWT haben von Hause aus keine Möglichkeiten mitbekommen, um Bilder und Grafiken anzuzeigen. Diese Fähigkeiten müssen ihnen nachträglich vom Programmierer verliehen werden.&lt;br /&gt;
Dazu ist es erforderlich, vom gewünschten Objekt-Typ zu erben und Methoden zur Ausgabe einzufügen. Im Folgenden werden wir das am Beispiel eines [http://docs.oracle.com/javase/7/docs/api/java/awt/Panel.html java.awt.Panel] demonstrieren.&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
public class ImagePanel extends Panel {&lt;br /&gt;
   private Image image;&lt;br /&gt;
&lt;br /&gt;
   public ImagePanel(Image image) {&lt;br /&gt;
      setImage(image);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setImage(Image image) {&lt;br /&gt;
      this.image = image;&lt;br /&gt;
      repaint();&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public Dimension getPreferredSize() {&lt;br /&gt;
       return new Dimension(image.getWidth(this), image.getHeight(this)));&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void paint(Graphics g) {&lt;br /&gt;
      super.paint(g);&lt;br /&gt;
      if(image != null) {&lt;br /&gt;
         g.drawImage(image, 0, 0, this);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Dieses Panel kann in AWT-Anwendungen nun Bilder anzeigen. [http://wiki.byte-welt.net/wiki/LayoutManager_der_Standard-Java-API LayoutManager] berechnen auch den Platz, den das Label im Layout benötigen wird.&lt;br /&gt;
&lt;br /&gt;
=Laden von Grafikdateien in Swing=&lt;br /&gt;
In Swing haben die Java-Erfinder von Sun sehr leistungsfähige Klassen für das Einlesen von Grafikdaten aus unterschiedlichen Quellen entwickelt, die auch die Anwendung in Applets und Applikationen vereinheitlicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Varianten zum Einbinden von Grafiken==&lt;br /&gt;
Viele Wege führen bekanntlich nach Rom, so auch beim erfolgreichen Laden und Anzeigen von Grafikdateien in Java.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ImageIO===&lt;br /&gt;
{{JAPI|javax.imageio.ImageIO}} ist eine sehr effiziente und einfach zu handhabende Klasse zum Laden von Grafikdateien.&amp;lt;br&amp;gt;&lt;br /&gt;
Sie stellt u.a. Methoden bereit, um Bilder aus verschiedenen Quellen zu laden. So z.B. aus einer Datei, einem {{JAPI|InputStream}} oder von einer {{JAPI|URL}}.&lt;br /&gt;
Ergebnis des Einlesens mit {{JAPI|ImageIO}} ist immer ein Objekt vom Typ {{JAPI|BufferedImage}}, welches die Klasse {{JAPI|java.awt.Image}} erweitert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laden aus einer Datei mit Angabe ihres Namens:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Image image = ImageIO.read(new File(&amp;quot;demo.jpg&amp;quot;));&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Diese Variante ist für das Laden von Bildern aus Dateien des lokalen Dateisystems geeignet. Z.B. mit Hilfe von [http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html JFileChooser]&amp;lt;br&amp;gt;&lt;br /&gt;
Sie kommt aber nicht für die Verwendung von Applets in Frage, weil mit File-Zugriffen auf dem Client unerlaubte Operationen versucht werden würden.&lt;br /&gt;
Sie ist also nur für den Gebrauch in Applikationen denkbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laden eines Bildes aus einem InputStream:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Image image = ImageIO.read(getClass().getResource(&amp;quot;demo.jpg&amp;quot;));&amp;lt;/code=java&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;getClass().getResource(&amp;quot;...&amp;quot;)&amp;lt;/code&amp;gt; &amp;lt;span style=&amp;quot;color: green; font-weight: bold;&amp;quot;&amp;gt; erzeugt hier einen InputStream zur Datei. Diese Variante kommt bspw. zum Einsatz, wenn sich Bilder innerhalb einer Jar-Datei befinden. Sie funktioniert aber auch, wenn die Klassen und Grafikdateien noch unverpackt im lokalen Dateisystem liegen. Man braucht also nichts mehr verändern, wenn man später aus den fertigen Klassen eine Jar-Datei erzeugt.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laden eines Bildes in einem Package relativ zu dieser Klasse aus einem InputStream:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Image image = ImageIO.read(getClass().getResource(&amp;quot;../images/demo.jpg&amp;quot;));&amp;lt;/code=java&amp;gt; &lt;br /&gt;
Es wird ein InputStream zur Datei in einer Jar-Datei erzeugt, der sie aus einem Verzeichnis relativ zu dieser Klasse läd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laden eines Bildes in einem Package absolut zu einer Klasse aus einem InputStream:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Image image = ImageIO.read(getClass().getResource(&amp;quot;/de/any-domain/project/images/demo.jpg&amp;quot;));&amp;lt;/code=java&amp;gt; &lt;br /&gt;
Es wird ein InputStream zur Datei erzeugt, der ausgehend vom obersten Package ganz genau den Speicherort in einer Jar-Datei spezifiziert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laden eines Bildes von einer URL:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Image image = ImageIO.read(new URL(&amp;quot;http://www.any-domain.de/images/demo.jpg&amp;quot;));&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Diese Variante kommt zum Einsatz, wenn Bilder aus einem Netzwerk geladen werden sollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weil dabei auch etwas schief gehen kann, muss der Abschnitt jeweils in einem try-catch - Block eingebaut werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ImageIO wird meistens dann benutzt, wenn man Grafikdateien laden und diese später selbst auf GUI-Komponenten zeichnen möchte.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===ImageIcon===&lt;br /&gt;
[[Objekt]]e von {{JAPI|ImageIcon}} sind zur direkten Verwendung auf Swing-GUI-Komponenten wie bspw. {{JAPI|JButton}}, {{JAPI|JLabel}}, {{JAPI|JMenuItem}} etc. vorgesehen. Sie sind die Repräsentation von Icons oder Bildern, die auf der lokalen Festplatte, in einem Netzwerk, oder bereits im Speicher als Image-Objekt vorliegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;javax.swing.ImageIcon&#039;&#039;&#039; ist also eine konkrete Implementierung des &#039;&#039;&#039;Icon&#039;&#039;&#039;-Interfaces, welches grundlegende Methoden für die Arbeit mit Icons oder Abbildungen definiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Laden der Bilder wird im Hintergrund bereits mit dem {{JAPI|java.awt.Mediatracker}} überwacht, so dass die Bilder auf jeden Fall im Speicher sind, bevor sie gezeichnet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Der [[Konstruktor]] von ImageIcon erwartet die Übergabe des Pfades zum Speicherort bzw. den Namen der zu ladenen Datei in Form eines Strings oder in Form eines {{JAPI|Image}} oder einer {{JAPI|URL}}.&lt;br /&gt;
Demzufolge können Bilder aus Grafikdateien wie folgt in ImageIcon-Objekten referenziert werden:&lt;br /&gt;
&lt;br /&gt;
Referenzierung eines Bildes mit Hilfe eines vorher geladenen Image-Objektes:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
JButton button = null;&lt;br /&gt;
ImageIcon icon = null;&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
  Image image = ImageIO.read(&amp;quot;demo.jpg&amp;quot;);&lt;br /&gt;
  icon = new ImageIcon(image);&lt;br /&gt;
}&lt;br /&gt;
catch(IOException e) {&lt;br /&gt;
  e.printStackTrace();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
button = new JButton(&amp;quot;Demo&amp;quot;, icon);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das gleiche Ergebnis erhalten wir mit Referenzierung eines Bildes mit Hilfe des Dateinamens:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
ImageIcon icon = new ImageIcon(&amp;quot;demo.jpg&amp;quot;);&lt;br /&gt;
JButton button = new JButton(&amp;quot;Demo&amp;quot;, icon);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
Das Bild befindet sich bei diesem Beipsiel in der lokalen Verzeichnisebene, im gleichen Verzeichnis &#039;&#039;dieser&#039;&#039; Klasse.&lt;br /&gt;
&lt;br /&gt;
Referenzierung eines Bildes in einem Netzwerk mit Hilfe einer URL:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
ImageIcon icon = new ImageIcon(new URL(&amp;quot;http://www.any-domain.de/images/demo.jpg&amp;quot;));&lt;br /&gt;
JButton button = new JButton(&amp;quot;Demo&amp;quot;, icon);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Referenzierung eines Bildes, welches in der gleichen Jar-Datei gespeichert wurde.&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
ImageIcon icon = new ImageIcon(getClass().getResource(&amp;quot;demo.jpg&amp;quot;));&lt;br /&gt;
JButton button = new JButton(&amp;quot;Demo&amp;quot;, icon);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein ImageIcon wird immer nach den Vorgaben der einbettenden Komponente (JLabel, JButton etc.) gezeichnet bzw. angeordnet. Man hat hier also weniger Einfluss auf die Darstellung.&lt;br /&gt;
&lt;br /&gt;
=Laden von Bildern in JavaFX=&lt;br /&gt;
Swing verliert nach und nach den Einfluss in der GUI-Programmierung in Java. JavaFX bietet gegenüber Swing weitaus mehr Möglichkeiten bei der Gestaltung von Benutzeroberflächen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auch der Code zum Einbinden von Bildern ändert sich. Das wollen wir im Folgenden anhand von Beispielen demonstrieren. (Vielen Dank an unseren Benutzer &#039;&#039;&#039;ionutbaiu&#039;&#039;&#039; für das Kapitel)&lt;br /&gt;
&lt;br /&gt;
Die Änderungen zum Laden von Bildern in JavaFX gegenüber Swing bestehen in den Folgenden Punkten:&lt;br /&gt;
&lt;br /&gt;
1. Es wird nun die Klasse {{JAPI|javafx.scene.image.Image}} im Gegensatz zu {{JAPI|java.awt.Image}} verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Die Image-Klasse besitzt nun verschiedene Konstruktoren, die im wesentlichen die Aufgaben der Read-Funktionen aus {{JAPI|ImageIO}} ersetzen, um Bilder aus verschiedenen Quellen zu laden.&lt;br /&gt;
&lt;br /&gt;
In JavaFX gibt es mehrere Möglichkeiten Bilder zu verwenden.&lt;br /&gt;
&lt;br /&gt;
==Bilder als Hintergrund==&lt;br /&gt;
Bilder können als Hintergrund eines Elements verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Das vorgehen hierbei ist wie folgt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Bild laden&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Image imgBackground = new Image(getClass().getResource(&amp;quot;images/background.jpg&amp;quot;).toExternalForm());&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Bild in ein Hintergrundbild umwandeln&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
    BackgroundImage backgroundImage = new BackgroundImage(&lt;br /&gt;
                        imgBackground,&lt;br /&gt;
                        BackgroundRepeat.NO_REPEAT,&lt;br /&gt;
                        BackgroundRepeat.NO_REPEAT,&lt;br /&gt;
                        BackgroundPosition.DEFAULT,&lt;br /&gt;
                        BackgroundSize.DEFAULT);&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Hintergrund erstellen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Background background = new Background(backgroundImage);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Bei der Komponente (hier root) den neuen Hintergrund setzen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;root.setBackground(background);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bilder direkt verwenden==&lt;br /&gt;
Um Bilder direkt zu verwenden gibt es zudem die Klasse {{JAPI|ImageView}}, diese ist weitestgehend das Pendant zur Klasse {{JAPI|ImageIcon}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Bild laden&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;    Image imgIcon = new Image(getClass().getResource(&amp;quot;icons/icon.png&amp;quot;).toExternalForm());&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. ImageView mit Bild erstellen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;    ImageView imgView = new ImageView(imgIcon);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder direkt&lt;br /&gt;
&amp;lt;code=java&amp;gt;    ImageView imgView = new ImageView(getClass().getResource(&amp;quot;icons/icon.png&amp;quot;).toExternalForm());&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. ImageView dem Scene-Graph hinzufügen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;root.getChildren().add(imgView);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder z.B. einem Button das Bild in Form eines Icons hinzufügen.&lt;br /&gt;
&amp;lt;code=java&amp;gt;    Button button = new Button(&amp;quot;Button mit Bild&amp;quot;, imgView);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FXML und CSS==&lt;br /&gt;
Mit JavaFX gibt es zudem die Möglichkeit [[FXML]] und [[CSS]] einzusetzen.&lt;br /&gt;
Hierbei kann die Oberfläche in [[XML]] definiert werden und das Aussehen mit CSS beeinflusst werden, so daß eine saubere Trennung der Zuständigkeiten möglich ist.&lt;br /&gt;
&lt;br /&gt;
Eine Oberfläche mit einem Button kann mit FXML wie folgt in der Datei &#039;&#039;picture.fxml&#039;&#039; definiert werden&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
    &amp;lt;?import java.lang.*?&amp;gt;&lt;br /&gt;
    &amp;lt;?import java.util.*?&amp;gt;&lt;br /&gt;
    &amp;lt;?import javafx.scene.*?&amp;gt;&lt;br /&gt;
    &amp;lt;?import javafx.scene.control.*?&amp;gt;&lt;br /&gt;
    &amp;lt;?import javafx.scene.layout.*?&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
    &amp;lt;AnchorPane id=&amp;quot;AnchorPane&amp;quot; prefHeight=&amp;quot;200&amp;quot; prefWidth=&amp;quot;320&amp;quot; xmlns:fx=&amp;quot;http://javafx.com/fxml/1&amp;quot; xmlns=&amp;quot;http://javafx.com/javafx/8&amp;quot; fx:controller=&amp;quot;picture.PictureController&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;children&amp;gt;&lt;br /&gt;
            &amp;lt;Button fx:id=&amp;quot;button&amp;quot; layoutX=&amp;quot;10&amp;quot; layoutY=&amp;quot;10&amp;quot; onAction=&amp;quot;#handleButtonAction&amp;quot; text=&amp;quot;Button with Icon&amp;quot; /&amp;gt;        &lt;br /&gt;
        &amp;lt;/children&amp;gt;&lt;br /&gt;
    &amp;lt;/AnchorPane&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dieser Datei ist noch nichts bezüglich der Bilder zu finden. Um nun Bilder den einzelnen Elementen zuzuweisen wird eine datei pictures.css die so aussieht verwendet.&lt;br /&gt;
&amp;lt;code=css&amp;gt;&lt;br /&gt;
    #AnchorPane {&lt;br /&gt;
        -fx-background-image: url(images/background.jpg);&lt;br /&gt;
        -fx-background-repeat: no-repeat;&lt;br /&gt;
        -fx-background-position: center center;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    #button {&lt;br /&gt;
        -fx-graphic: url(icons/icon.png);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code=css&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Verknüpfung zwischen FXML und CSS zu bekommen, haben die Elemente in der FXML Datei jeweils eine ID.&lt;br /&gt;
(&amp;lt;code&amp;gt;id=&amp;quot;AnchorPane&amp;quot;&amp;lt;/code&amp;gt;, sowie &amp;lt;code&amp;gt;fx:id=&amp;quot;button&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In der CSS Datei werden diese Elemente mit dem Selektor &amp;lt;code&amp;gt;#AnchorPane&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;#button&amp;lt;/code&amp;gt; herausgesucht um dort das Aussehen und die Bilder zu setzen.&lt;br /&gt;
&lt;br /&gt;
Um FXML- und CSS-Datei in einer Anwendung zu verbinden kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. View aus der FXML-Datei laden&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Parent root = FXMLLoader.load(getClass().getResource(&amp;quot;picture.fxml&amp;quot;));&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Scene erstellen und View via Konstruktor zuweisen.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;Scene scene = new Scene(root);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. CSS-Stylesheet laden und der Scene hinzufügen.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;scene.getStylesheets().add(getClass().getResource(&amp;quot;picture.css&amp;quot;).toExternalForm());&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Anzeigen der Scene&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
      stage.setScene(scene);&lt;br /&gt;
      stage.show();&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Code-Beispiele=&lt;br /&gt;
&lt;br /&gt;
==JApplets==&lt;br /&gt;
In Swing-Applets kann für das effiziente Einlesen von Grafikdaten die Klasse javax.imageio.ImageIO verwendet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Wie einfach ihre Benutzung ist, werden wir im Anschluss demonstrieren.&lt;br /&gt;
&lt;br /&gt;
===Einfache JApplet-Klassen===&lt;br /&gt;
Zeichnen auf einen Container (JPanel), welcher dem JApplet als Hintergrund hinzugefügt wird:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
import javax.imageio.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.net.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class PictureApplet extends JApplet {&lt;br /&gt;
   private Image image, background;&lt;br /&gt;
&lt;br /&gt;
   public void init() {&lt;br /&gt;
      setContentPane(new MyContentPane());&lt;br /&gt;
&lt;br /&gt;
      try {&lt;br /&gt;
         image = ImageIO.read(new URL(getCodeBase(), &amp;quot;icon.png&amp;quot;));&lt;br /&gt;
         background = ImageIO.read(new URL(getCodeBase(), &amp;quot;/images/background.jpg&amp;quot;));&lt;br /&gt;
      }&lt;br /&gt;
      catch(IllegalArgumentException iae) {&lt;br /&gt;
	 JOptionPane.showMessageDialog(this, &amp;quot;Grafikdatei nicht gefunden!&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      catch(IOException ioe) {&lt;br /&gt;
	 JOptionPane.showMessageDialog(this, &amp;quot;Fehler beim Einlesen der Grafikdatei!&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private class MyContentPane extends JPanel {&lt;br /&gt;
&lt;br /&gt;
      protected void paintComponent(Graphics g) {&lt;br /&gt;
         super.paintComponent(g);&lt;br /&gt;
         if(background != null &amp;amp;&amp;amp; image != null) { //beide Bilder müssen im Speicher liegen, sonst wird nichts gezeichnet&lt;br /&gt;
            g.drawImage(background, 0, 0, this);&lt;br /&gt;
            g.drawImage(image, 10, 10, this);&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Link: [[Einbinden von Applets in HTML-Dateien]]&lt;br /&gt;
&lt;br /&gt;
===Applets in Jar-Dateien===&lt;br /&gt;
Wenn sich das Applet gemeinsam mit der zu ladenden Grafik in einer Jar-Datei zusammengefasst wurden, muss die Grafik über den ClassLoader ins Applet geladen werden.&lt;br /&gt;
&lt;br /&gt;
Zeichnen auf einen Container (JPanel), welcher dem JApplet als Hintergrund hinzugefügt wird:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
import javax.imageio.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.net.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class PictureApplet extends JApplet {&lt;br /&gt;
   private Image image, background;&lt;br /&gt;
&lt;br /&gt;
   public void init() {&lt;br /&gt;
      setContentPane(new MyContentPane());&lt;br /&gt;
&lt;br /&gt;
      try {&lt;br /&gt;
         image = ImageIO.read(getClass().getResource(&amp;quot;icon.png&amp;quot;));&lt;br /&gt;
         background = ImageIO.read(getClass().getResource(&amp;quot;images/background.jpg&amp;quot;));&lt;br /&gt;
      }&lt;br /&gt;
      catch(IllegalArgumentException iae) {&lt;br /&gt;
	 JOptionPane.showMessageDialog(this, &amp;quot;Grafikdatei nicht gefunden!&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      catch(IOException ioe) {&lt;br /&gt;
	 JOptionPane.showMessageDialog(this, &amp;quot;Fehler beim Einlesen der Grafikdatei!&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   private class MyContentPane extends JPanel {&lt;br /&gt;
&lt;br /&gt;
      protected void paintComponent(Graphics g) {&lt;br /&gt;
         super.paintComponent(g);&lt;br /&gt;
         if(background != null &amp;amp;&amp;amp; image != null) { //beide Bilder müssen im Speicher liegen, sonst wird nichts gezeichnet&lt;br /&gt;
            g.drawImage(background, 0, 0, this);&lt;br /&gt;
            g.drawImage(image, 10, 10, this);&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Applet-Tag in der HTML-Datei muss jetzt angepasst werden, damit der Browser weiß, wo sich das Applet befindet.&amp;lt;br&amp;gt;&lt;br /&gt;
Link: [http://wiki.byte-welt.net/wiki/Einbinden_von_Applets_in_HTML-Dateien Applet-Tag für Jar-Dateien]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Swing-Applikationen==&lt;br /&gt;
Auch Swing-Applikationen werden im Allgemeinen in Jar-Archiven zusammengefasst. Diese lassen sich auf jedem System per Doppelklick starten, oder per Webstart über das Internet laden.&amp;lt;br&amp;gt;&lt;br /&gt;
Hier also nun die Variante für eine Applikation. Auffällig ist, dass sich der Code des Panels gegenüber dem Applet nur leicht, der Code zum Laden der Bilder aber gar nicht verändert hat.&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
import javax.imageio.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.net.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
&lt;br /&gt;
public class PicturePanel extends JPanel { &lt;br /&gt;
   private Image image, background;&lt;br /&gt;
 &lt;br /&gt;
   public PicturePanel() {&lt;br /&gt;
      super(new GridBagLayout());&lt;br /&gt;
&lt;br /&gt;
      try {&lt;br /&gt;
         image = ImageIO.read(getClass().getResource(&amp;quot;icons/icon.png&amp;quot;));&lt;br /&gt;
         background = ImageIO.read(getClass().getResource(&amp;quot;images/background.jpg&amp;quot;));&lt;br /&gt;
      }&lt;br /&gt;
      catch(IllegalArgumentException iae) {&lt;br /&gt;
         JOptionPane.showMessageDialog(this, &amp;quot;Grafikdatei nicht gefunden!\n&amp;quot;+iae.getMessage());&lt;br /&gt;
      }&lt;br /&gt;
      catch(IOException ioe) {&lt;br /&gt;
         JOptionPane.showMessageDialog(this, &amp;quot;Fehler beim Einlesen einer Grafikdatei!\n&amp;quot;+ioe.getMessage());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      JButton pictureButton = new JButton(&amp;quot;Button mit Icon&amp;quot;, new ImageIcon(image));&lt;br /&gt;
      add(pictureButton);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   @Override&lt;br /&gt;
   protected void paintComponent(Graphics g) {&lt;br /&gt;
      super.paintComponent(g);&lt;br /&gt;
      if(background != null) { //Bild muss im Speicher liegen, sonst wird nichts gezeichnet&lt;br /&gt;
         g.drawImage(background, 0, 0, this);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ganze kann nun in einem Fenster angezeigt werden:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class PictureFrame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        JFrame f = new JFrame(&amp;quot;Bildbetrachter&amp;quot;);&lt;br /&gt;
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
        f.add(new PicturePanel());&lt;br /&gt;
        f.pack();&lt;br /&gt;
        f.setLocationRelativeTo(null);&lt;br /&gt;
        f.setVisible(true);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaFX-Applikationen ==&lt;br /&gt;
Wenn man sich nun den Code einer entsprechenden JavaFX-Anwendung ansieht, könnte man meinen, dass es scheinbar Parallelen zu AWT und Swing gibt. Java-FX-Klassen haben nun kein vorangestelltes &amp;quot;J&amp;quot; mehr und die Initialisierung eines {{JAPI|javafx.scene.control.Button}} sieht aus, wie bei einem Swing-{{JAPI|JButton}}. Allerdings gibt es auch Neues, wie nun gezeigt wird:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.io.StringWriter;&lt;br /&gt;
import javafx.application.Application;&lt;br /&gt;
import javafx.scene.Scene;&lt;br /&gt;
import javafx.scene.control.Alert;&lt;br /&gt;
import javafx.scene.control.Button;&lt;br /&gt;
import javafx.scene.image.Image;&lt;br /&gt;
import javafx.scene.image.ImageView;&lt;br /&gt;
import javafx.scene.layout.Background;&lt;br /&gt;
import javafx.scene.layout.BackgroundImage;&lt;br /&gt;
import javafx.scene.layout.BackgroundPosition;&lt;br /&gt;
import javafx.scene.layout.BackgroundRepeat;&lt;br /&gt;
import javafx.scene.layout.BackgroundSize;&lt;br /&gt;
import javafx.scene.layout.StackPane;&lt;br /&gt;
import javafx.stage.Stage;&lt;br /&gt;
&lt;br /&gt;
public class Picture extends Application {&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start(Stage primaryStage) {&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Image imgBackground = new Image(getClass().getResource(&amp;quot;images/background.jpg&amp;quot;).toExternalForm());&lt;br /&gt;
            BackgroundImage backgroundImage = new BackgroundImage(&lt;br /&gt;
                    imgBackground,&lt;br /&gt;
                    BackgroundRepeat.NO_REPEAT,&lt;br /&gt;
                    BackgroundRepeat.NO_REPEAT,&lt;br /&gt;
                    BackgroundPosition.DEFAULT,&lt;br /&gt;
                    BackgroundSize.DEFAULT);&lt;br /&gt;
            Background background = new Background(backgroundImage);&lt;br /&gt;
&lt;br /&gt;
            Image imgIcon = new Image(getClass().getResource(&amp;quot;icons/icon.png&amp;quot;).toExternalForm());&lt;br /&gt;
            ImageView imgView = new ImageView(imgIcon);&lt;br /&gt;
&lt;br /&gt;
            Button btn = new Button(&amp;quot;Button mit Icon&amp;quot;, imgView);&lt;br /&gt;
            btn.setText(&amp;quot;Button mit Icon&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            StackPane root = new StackPane();&lt;br /&gt;
            root.getChildren().add(btn);&lt;br /&gt;
            root.setBackground(background);&lt;br /&gt;
&lt;br /&gt;
            Scene scene = new Scene(root, 300, 250);&lt;br /&gt;
&lt;br /&gt;
            primaryStage.setTitle(&amp;quot;Bildbetrachter FX&amp;quot;);&lt;br /&gt;
            primaryStage.setScene(scene);&lt;br /&gt;
            primaryStage.show();&lt;br /&gt;
&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            Alert alert = new Alert(Alert.AlertType.ERROR);&lt;br /&gt;
            alert.setTitle(&amp;quot;Fehler&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            StringWriter sw = new StringWriter();&lt;br /&gt;
            PrintWriter pw = new PrintWriter(sw);&lt;br /&gt;
            e.printStackTrace(pw);&lt;br /&gt;
&lt;br /&gt;
            alert.setContentText(sw.toString());&lt;br /&gt;
&lt;br /&gt;
            alert.showAndWait();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        launch(args);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grafiken aus externen Jar-Dateien laden=&lt;br /&gt;
Im Internet sind reichlich freie Quellen zu finden, die spezielle Grafiken (Icons) für die visuelle Kennzeichnung und Verschönerung von GUI-Elementen eingesetzt werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Quellen liegen meist in gepackter Form als Zip-Archiv vor. Um sie für ein Java-Programm nutzbar zu machen, kann man eine solche Zip-Datei einfach in eine Jar-Datei umbenennen (Datei-Suffix ändern) oder auch, unter Beachtung der Lizenz, einzelne Dateien extrahieren und in eine neue Jar-Datei packen.&lt;br /&gt;
Den Weg, Grafikdateien aus der Jar-Datei zu laden, die auch unser Programm enthält, haben wir bereits oben gesehen.&lt;br /&gt;
Wir werden uns nun aber mal ansehen, wie Grafikdateien aus externen Bibliotheken bzw. Archiven geladen werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bibliotheken im Classpath==&lt;br /&gt;
(Artikel noch einzufügen)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bibliotheken außerhalb des Classpaths==&lt;br /&gt;
Um Grafikdateien aus einer externen Jar-Datei zu laden, die sich nicht im Sichtbarkeitsbereich des ClassLoaders befindet, kann man den absoluten Pfad zur Jar-Datei entsprechend nach folgendem Schema zusammenbauen:&lt;br /&gt;
&lt;br /&gt;
 jar:protocol//:path/to/jarfile/jarfile.jar!/my/package&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;protocol&#039;&#039;&#039; bezeichnet hier z.B. &#039;&#039;http&#039;&#039; oder &#039;&#039;file&#039;&#039;.&lt;br /&gt;
Direkt nach der Jar-Datei folgt ein Ausrufezeichen. Was danach folgt ist der Pfad innerhalb der Jar-Datei, also die einzelnen Packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;URL jarPath = new URL(&amp;quot;jar:file://pfad/zur/jardatei/MeinProgramm.jar!/bilder/bild.jpg&amp;quot;);&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&#039;&#039;/bilder/bild.jpg&#039;&#039; bezeichnet hierbei den Pfad innerhalb der externen Jar-Datei zur Grafikdatei.&lt;br /&gt;
&lt;br /&gt;
=Fragen stellen=&lt;br /&gt;
Wir haben hier bereits viele Dinge beim Umgang mit Grafiken in Java-Programmen besprochen.&lt;br /&gt;
Du hast immer noch Fragen? Dann hier im passenden Themenbereich im Byte-Welt-Forum: [https://forum.byte-welt.net/c/java-forum/awt-swing-javafx-swt AWT, Swing, JavaFX &amp;amp; SWT]&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Tutorials (Java)]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7570</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7570"/>
		<updated>2018-02-17T13:19:18Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: L-ectron-x verschob die Seite Programmierparadigmen nach Programmierparadigma, ohne dabei eine Weiterleitung anzulegen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen [[Objekt|Objekte]] zur [[Kapselung]] von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise [[Vererbung]] oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der [[Objektorientierte Programmierung (ooP)|objektorientierten Programmierung]] aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und [[Polymorphie]].&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als [[Funktion|Funktionen]] aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
=Literaturverzeichnis=&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7569</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7569"/>
		<updated>2018-02-17T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen [[Objekt|Objekte]] zur [[Kapselung]] von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise [[Vererbung]] oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der [[Objektorientierte Programmierung (ooP)|objektorientierten Programmierung]] aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und [[Polymorphie]].&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als [[Funktion|Funktionen]] aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
=Literaturverzeichnis=&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7568</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7568"/>
		<updated>2018-02-17T12:56:01Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen [[Objekt|Objekte]] zur [[Kapselung]] von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise [[Vererbung]] oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der [[Objektorientierte Programmierung (ooP)|objektorientierten Programmierung]] aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und [[Polymorphie]].&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als [[Funktion|Funktionen]] aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
==Literaturverzeichnis==&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7567</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7567"/>
		<updated>2018-02-17T12:53:57Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen [[Objekt|Objekte]] zur [[Kapselung]] von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise [[Vererbung]] oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der [[OOP|objektorientierten Programmierung]] aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und [[Polymorphie]].&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als [[Funktion|Funktionen]] aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
==Literaturverzeichnis==&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7566</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7566"/>
		<updated>2018-02-17T12:53:37Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen [[Objekt|Objekte]] zur [[Kapselung]] von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise [[Vererbung] oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der [[OOP|objektorientierten Programmierung]] aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und [[Polymorphie]].&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als [[Funktion|Funktionen]] aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
==Literaturverzeichnis==&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7565</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7565"/>
		<updated>2018-02-17T12:53:17Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen [[Objekt|Objekte] zur [[Kapselung]] von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise [[Vererbung] oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der [[OOP|objektorientierten Programmierung]] aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und [[Polymorphie]].&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als [[Funktion|Funktionen]] aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
==Literaturverzeichnis==&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7564</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7564"/>
		<updated>2018-02-17T12:51:06Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen Objekte zur Kapselung von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise Vererbung oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der objektorientierten Programmierung aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und Polymorphie.&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als Funktionen aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
==Literaturverzeichnis==&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7563</id>
		<title>Programmierparadigma</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Programmierparadigma&amp;diff=7563"/>
		<updated>2018-02-17T12:47:16Z</updated>

		<summary type="html">&lt;p&gt;L-ectron-x: Die Seite wurde neu angelegt: „Kategorie:Programmierung  =Imperativ= Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imp…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=Imperativ=&lt;br /&gt;
Das Programm besteht aus einer Folge von Anweisungen, die streng sequentiell abgearbeitet werden. Das Konzept des imperativen Programmierparadigmas beruht auf Funktionen und Prozeduren zur Abbildung der Funktionalität und Wiederverwendung von Quellcode.&lt;br /&gt;
&lt;br /&gt;
=Objektbasiert=&lt;br /&gt;
Diese Programmiersprachen kennen Objekte zur Kapselung von Daten und Funktionalität. Weitergehende Konzepte, wie beispielsweise Vererbung oder die Darstellung von Beziehungen zwischen Objekten, werden jedoch nicht angeboten. Objektbasierte &lt;br /&gt;
Sprachen können damit als Vorstufe der objektorientierten Programmierung aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
=Objektorientiert=&lt;br /&gt;
Programmiersprachen dieser Gattung erweitern das objektbasierte Programmierparadigma um die typischen Konzepte der Objektorientierung, wie Vererbung und Polymorphie.&lt;br /&gt;
&lt;br /&gt;
=Funktional=&lt;br /&gt;
Ein funktionales Programm besteht nur aus einer Reihe von Funktionsaufrufen. Eigenständige Wertzuweisungen existieren nicht. Alle Elemente können als Funktionen aufgefasst werden. Einsatzgebiete sind Anwendungen der künstlichen Intelligenz, Compilerbau und Computeralgebra-Systeme.&lt;br /&gt;
&lt;br /&gt;
=Logisch=&lt;br /&gt;
Im Mittelpunkt steht der Aufbau einer Datenbasis, die aus Fakten und Regeln besteht. Fakten sind dabei wahre Aussagen im Sinne der Mathematik. Im Fokus steht die Problemformulierung, nicht der Lösungsalgorithmus.&lt;br /&gt;
&lt;br /&gt;
=Deklarativ=&lt;br /&gt;
Überbegriff für das funktionale und das logische Paradigma.&lt;br /&gt;
&lt;br /&gt;
==Quelle==&lt;br /&gt;
*https://jaxenter.de/java-kurs-teil-3-49623&lt;/div&gt;</summary>
		<author><name>L-ectron-x</name></author>
	</entry>
</feed>