<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iluZio</title>
	<atom:link href="http://iluzio.de/feed" rel="self" type="application/rss+xml" />
	<link>http://iluzio.de</link>
	<description>Spiele- und Anwendungs-Entwicklung</description>
	<lastBuildDate>Thu, 16 Feb 2012 17:32:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JRE-Version in einem Inno-Setup überprüfen</title>
		<link>http://iluzio.de/archives/440</link>
		<comments>http://iluzio.de/archives/440#comments</comments>
		<pubDate>Fri, 03 Feb 2012 00:57:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[check]]></category>
		<category><![CDATA[eingebaut]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[inno]]></category>
		<category><![CDATA[installer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JRE]]></category>
		<category><![CDATA[minimum]]></category>
		<category><![CDATA[mitgeliefert]]></category>
		<category><![CDATA[mitliefern]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[setup]]></category>
		<category><![CDATA[überprüfen]]></category>
		<category><![CDATA[überprüfung]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=440</guid>
		<description><![CDATA[In diesem Artikel geht es darum, wie man in einem Inno-Setup Skript einen JRE-Check machen kann. Es soll überprüft werden, ob und welche welche JRE (Java Runtime Environment) auf dem PC vorhanden ist, und wie man ggf. eine im Setup &#8230; <a href="http://iluzio.de/archives/440">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, wie man in einem Inno-Setup Skript einen JRE-Check machen kann. Es soll überprüft werden, ob und welche welche JRE (Java Runtime Environment) auf dem PC vorhanden ist, und wie man ggf. eine im Setup mitgelieferte JRE installieren kann, falls es auf dem PC entweder gar keine JRE gibt, oder diese veraltet ist.</p>
<p><strong>1 Voraussetzungen</strong></p>
<p>Dieser Artikel setzt Kenntnisse für Inno-Setup (http://www.jrsoftware.org/isinfo.php)  voraus. Ich benutze für die Bearbeitung der Inno-Setup Skripte die grafische Oberfläche InnoIDE (http://www.innoide.org/), die ich auch sehr empfehlen kann. Damit ist das Durcharbeiten dieses Artikels auf jeden Fall einfacher.</p>
<p><strong>2 Custom Messages</strong></p>
<p>Als erstes müssen wir in das Skript drei so genannte &#8220;Custom Messages&#8221; einfügen. Das sind Textbausteine, die allein noch nichts tun. Wir müssen sie aber anlegen, damit wir sie später verwenden können, um den Benutzer zu informieren oder zu befragen:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>CustomMessages<span style="">&#93;</span></span>
german.jre_not_found<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">Für <span style="">&#123;</span>#MyAppName<span style="">&#125;</span> wird Java benötigt. %nAuf diesem Computer wurde kein Java gefunden. %n%nWollen Sie es jetzt installieren?</span>
german.jre_too_old<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">Für <span style="">&#123;</span>#MyAppName<span style="">&#125;</span> wird eine aktuelle Version von Java benötigt. %nDas auf diesem Computer installierte Java ist jedoch veraltet. %n%nWollen Sie es jetzt eine aktuelle Version von Java installieren?</span>
german.installing_jre<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">Java wird installiert... Bitte warten....</span></pre></div></div>

<p><strong>3 Files</strong></p>
<p>Dann muss im Abschnitt &#8220;Files&#8221; das JRE-Installationsprogramm mitgeliefert werden, dass im Falle einer veralteten oder gar nicht vorhandenen JRE auf dem PC ausgeführt wird:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>Files<span style="">&#93;</span></span>
Source: jre-6u22-windows-i586-s.exe<span style="color: #666666; font-style: italic;">; DestDir: &quot;{app}&quot;; Flags: ignoreversion</span></pre></div></div>

<p><strong>4 Run</strong></p>
<p>Im Abschnitt &#8220;Run&#8221; wird eingetragen, dass das zuvor hinzugefügte JRE-Installationsprogramm nach dem eigentlichen Setup ausgeführt werden soll. Dies ist allerdings mit der Bedingung &#8220;CheckJRE&#8221; verknüpft, wie man es ganz am Ende der Zeile sehen kann. Das bedeutet, dass diese Anweisung nicht immer ausgeführt wird, sondern nur wenn die Bedingung mit dem Namen &#8220;CheckJRE&#8221; erfüllt ist. Im Klartext wird hier eine Funktion weiter unten mit genau diesem Namen aufgerufen. Der Boolean(Ja/Nein)-Rückgabewert entscheidet, ob das JRE-Installationsprogramm gestartet wird, oder nicht.</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>Run<span style="">&#93;</span></span>
Filename: <span style="">&#123;</span>app<span style="">&#125;</span>\jre-6u22-windows-i586-s.exe<span style="color: #666666; font-style: italic;">; StatusMsg: &quot;{cm:installing_jre}&quot;; Check: CheckJRE;</span></pre></div></div>

<p><strong>5 Code</strong></p>
<p>Hier kommen wir zur eigentlichen JRE-Prüfung, einer Funktion mit dem Namen &#8220;CheckJRE&#8221;, wie sie aus dem &#8220;Run&#8221;-Abschnitt aufgerufen wird.<br />
Hier werden auch die Textbausteine von weiter oben verwendet.<br />
In der Funktion gibt es eine Zeile &#8220;NecessaryJREVersion := &#8217;1.6&#8242;;&#8221;, dort kann man die gewünschte bzw. minimale JRE-Version eintragen, die vorausgesetzt werden soll. Dies muss nicht zwingend mit der mitgelieferten JRE-Version übereinstimmen. Es kann durchaus auch eine JRE-Version 1.6 mitgeliefert werden (wie weiter oben beschrieben), es wird im Inno-Setup vielleicht aber nur JRE 1.5 vorausgesetzt.</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>code<span style="">&#93;</span></span>
Function CheckJRE<span style="">&#40;</span><span style="">&#41;</span>: Boolean<span style="color: #666666; font-style: italic;">;</span>
var
  CurrentJREVersion: String<span style="color: #666666; font-style: italic;">;</span>
  NecessaryJREVersion: String<span style="color: #666666; font-style: italic;">;</span>
  JRENotFound: Boolean<span style="color: #666666; font-style: italic;">;</span>
  JRETooOld: Boolean<span style="color: #666666; font-style: italic;">;</span>
  InstallJRE: Boolean<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
begin
&nbsp;
  NecessaryJREVersion :<span style="color: #000066; font-weight:bold;">=</span> '<span style="">1.6</span>'<span style="color: #666666; font-style: italic;">;</span>
  JRENotFound :<span style="color: #000066; font-weight:bold;">=</span> False<span style="color: #666666; font-style: italic;">;</span>
  JRETooOld :<span style="color: #000066; font-weight:bold;">=</span> False<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  // check for JRE in registry  
  if <span style="">&#40;</span>RegQueryStringValue<span style="">&#40;</span>HKEY_LOCAL_MACHINE, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', CurrentJREVersion<span style="">&#41;</span><span style="">&#41;</span> then
  begin
    JRETooOld :<span style="color: #000066; font-weight:bold;">=</span> <span style="">&#40;</span>CurrentJREVersion &lt; NecessaryJREVersion<span style="">&#41;</span><span style="color: #666666; font-style: italic;">;</span>
  end else begin
    JRENotFound :<span style="color: #000066; font-weight:bold;">=</span> True<span style="color: #666666; font-style: italic;">;</span>
  end<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  // ask user
  InstallJRE :<span style="color: #000066; font-weight:bold;">=</span> False<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  if <span style="">&#40;</span>JRENotFound<span style="">&#41;</span> then
  begin
&nbsp;
    if <span style="">&#40;</span>MsgBox<span style="">&#40;</span>ExpandConstant<span style="">&#40;</span>'<span style="">&#123;</span>cm:jre_not_found<span style="">&#125;</span>'<span style="">&#41;</span>, mbinformation, mb_YesNo<span style="">&#41;</span> <span style="color: #000066; font-weight:bold;">=</span> idYes<span style="">&#41;</span> then
    begin
      InstallJRE :<span style="color: #000066; font-weight:bold;">=</span> True<span style="color: #666666; font-style: italic;">;</span>
    end<span style="color: #666666; font-style: italic;">;</span>
  end<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  if <span style="">&#40;</span>JRETooOld<span style="">&#41;</span> then
  begin
    if <span style="">&#40;</span>MsgBox<span style="">&#40;</span>ExpandConstant<span style="">&#40;</span>'<span style="">&#123;</span>cm:jre_too_old<span style="">&#125;</span>'<span style="">&#41;</span>, mbinformation, mb_YesNo<span style="">&#41;</span> <span style="color: #000066; font-weight:bold;">=</span> idYes<span style="">&#41;</span> then
    begin
      InstallJRE :<span style="color: #000066; font-weight:bold;">=</span> True<span style="color: #666666; font-style: italic;">;</span>
    end<span style="color: #666666; font-style: italic;">;</span>
  end<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  Result :<span style="color: #000066; font-weight:bold;">=</span> InstallJRE<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
end<span style="color: #666666; font-style: italic;">;</span></pre></div></div>

<p><strong>6 Ende</strong></p>
<p>Ich hoffe, dass ich mit diesem Artikel weiter helfen konnte und freue mich über Feedback in Form von Kommentaren und Verbesserungsvorschlägen.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/440/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comic-Sprechblasen mit Java2D zeichnen</title>
		<link>http://iluzio.de/archives/412</link>
		<comments>http://iluzio.de/archives/412#comments</comments>
		<pubDate>Thu, 02 Feb 2012 18:42:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Spiele-Programmierung]]></category>
		<category><![CDATA[bubbles]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[java2d]]></category>
		<category><![CDATA[sprechblase]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=412</guid>
		<description><![CDATA[Hier möchte ich eine Java-Klasse mit Euch teilen, die ich in ähnlicher Form in einem meiner Spiele verwende. Damit kann man mit Java2D, also mit Java-Bordmitteln, Sprechblasen im Comic-Stil zeichnen. Das sieht dann ungefähr so aus: Zeilenumbrüche muss man selbst &#8230; <a href="http://iluzio.de/archives/412">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hier möchte ich eine Java-Klasse mit Euch teilen, die ich in ähnlicher Form in einem meiner Spiele verwende. Damit kann man mit Java2D, also mit Java-Bordmitteln, Sprechblasen im Comic-Stil zeichnen. Das sieht dann ungefähr so aus:</p>
<p><img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_speak_left.png" alt="" title="bubble_speak_left" width="207" height="213" class="alignnone size-full wp-image-415" /></p>
<p>Zeilenumbrüche muss man selbst setzen, und zwar mit <strong>\n</strong> im String. Wenn ich oder jemand von Euch ein Stück Code parat hat, wie man das noch elegant automatisieren könnte, werde ich den Code hier auch gerne noch veröffentlichen.</p>
<p>Weitere Variationen von der normalen Sprechblase, wie man sie oben sehen kann, sind durch Anpassung des Codes sehr einfach machbar:</p>
<p><img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_speak_right.png" alt="" title="bubble_speak_right" width="309" height="244" class="alignnone size-full wp-image-416" /><br />
<img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_think_right.png" alt="" title="bubble_think_right" width="270" height="246" class="alignnone size-full wp-image-418" /><br />
<img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_think_left.png" alt="" title="bubble_think_left" width="287" height="210" class="alignnone size-full wp-image-417" /></p>
<p>Und hier die kommt die vereinfachte Java-Klasse, die nur den Sprech-Schnabel von links implementiert hat. Über Feedback in Form von Kommentaren und Verbesserungsvorschlägen würde ich mich sehr freuen!</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.geom.Path2D</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.geom.RoundRectangle2D</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BubbleFactory <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> X <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> Y <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> BORDER_HORIZONTAL <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> BORDER_VERTICAL <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> CORNER_ARC_HORIZONTAL_PERCENTAGE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.55</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> CORNER_ARC_VERTICAL_PERCENTAGE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.35</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> FONT_VERTICAL_OFFSET_PERCENTAGE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.15</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> BUBBLE_MIN_WIDTH <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> LIP_WIDTH <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> LIP_HEIGHT <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> LIP_OFFSET <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Image</span> buildBubble<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> text<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// first buffered image for calculations</span>
        <span style="color: #003399;">BufferedImage</span> calcImage <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedImage</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>, <span style="color: #cc66cc;">10</span>, <span style="color: #003399;">BufferedImage</span>.<span style="color: #006633;">TYPE_INT_ARGB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Graphics2D</span> calcg2d <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics2D</span><span style="color: #009900;">&#41;</span>calcImage.<span style="color: #006633;">getGraphics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// text and border calculations</span>
        <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> lines <span style="color: #339933;">=</span> text.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> textHeight <span style="color: #339933;">=</span> calcg2d.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> textHeightTotal <span style="color: #339933;">=</span> textHeight <span style="color: #339933;">*</span> lines.<span style="color: #006633;">length</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> textWidthTotal <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> s <span style="color: #339933;">:</span> lines<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">int</span> lineWidth <span style="color: #339933;">=</span> calcg2d.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">stringWidth</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            textWidthTotal <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span>lineWidth, textWidthTotal<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> borderWidth <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> BORDER_HORIZONTAL<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> textWidthTotal, BUBBLE_MIN_WIDTH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> borderHeight <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> BORDER_VERTICAL<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> textHeightTotal<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> arcHorizontal <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">*</span> CORNER_ARC_HORIZONTAL_PERCENTAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> arcVertical <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">*</span> CORNER_ARC_VERTICAL_PERCENTAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// actual buffered image</span>
        <span style="color: #003399;">BufferedImage</span> resultImage <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedImage</span><span style="color: #009900;">&#40;</span>X <span style="color: #339933;">+</span> borderWidth <span style="color: #339933;">+</span> <span style="color: #cc66cc;">10</span>, Y <span style="color: #339933;">+</span> borderHeight <span style="color: #339933;">+</span> <span style="color: #cc66cc;">50</span>, <span style="color: #003399;">BufferedImage</span>.<span style="color: #006633;">TYPE_INT_ARGB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Graphics2D</span> g2d <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics2D</span><span style="color: #009900;">&#41;</span>resultImage.<span style="color: #006633;">getGraphics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setRenderingHint</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_ANTIALIASING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_ANTIALIAS_ON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// border</span>
        <span style="color: #003399;">Shape</span> roundRectangle <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RoundRectangle2D</span>.<span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span>X, Y, borderWidth, borderHeight, arcHorizontal, arcVertical<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">fill</span><span style="color: #009900;">&#40;</span>roundRectangle<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>roundRectangle<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// text</span>
        <span style="color: #000066; font-weight: bold;">int</span> verticalOffset <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>textHeight <span style="color: #339933;">*</span> FONT_VERTICAL_OFFSET_PERCENTAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> lines.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">String</span> line <span style="color: #339933;">=</span> lines<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> lineWidth <span style="color: #339933;">=</span> g2d.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">stringWidth</span><span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> X <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>lineWidth <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> y <span style="color: #339933;">=</span> Y <span style="color: #339933;">+</span> BORDER_VERTICAL <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>textHeight <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> verticalOffset<span style="color: #339933;">;</span>
            g2d.<span style="color: #006633;">drawString</span><span style="color: #009900;">&#40;</span>line, x, y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// lip</span>
        Path2D.<span style="color: #003399;">Double</span> path <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Path2D.<span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> lipX <span style="color: #339933;">=</span> X <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> LIP_OFFSET<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> lipY <span style="color: #339933;">=</span> Y <span style="color: #339933;">+</span> borderHeight<span style="color: #339933;">;</span>
&nbsp;
        path.<span style="color: #006633;">moveTo</span><span style="color: #009900;">&#40;</span>lipX, lipY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        path.<span style="color: #006633;">lineTo</span><span style="color: #009900;">&#40;</span>lipX <span style="color: #339933;">-</span> LIP_WIDTH, lipY <span style="color: #339933;">+</span> LIP_HEIGHT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        path.<span style="color: #006633;">lineTo</span><span style="color: #009900;">&#40;</span>lipX <span style="color: #339933;">-</span> LIP_WIDTH, lipY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">fill</span><span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> resultImage<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>So verwendet man die Klasse</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Image</span> bubbleImage <span style="color: #339933;">=</span> BubbleFactory.<span style="color: #006633;">buildBubble</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Ich liebe die<span style="color: #000099; font-weight: bold;">\n</span> Sprechblasen von<span style="color: #000099; font-weight: bold;">\n</span>iluZio.de!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/412/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 10 (Hallo Welt!)</title>
		<link>http://iluzio.de/archives/147</link>
		<comments>http://iluzio.de/archives/147#comments</comments>
		<pubDate>Fri, 27 Jan 2012 10:45:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=147</guid>
		<description><![CDATA[In diesem Artikel werden wir endlich unser erstes Programm mit Java erstellen, übersetzen und ausführen. &#8220;Hallo Welt!&#8221; auf der grünen Wiese Wir wenden uns wieder dem Vergleich mit der grünen Wiese zu. Wir wollen ein ganz neues Programmier-Projekt starten, das &#8230; <a href="http://iluzio.de/archives/147">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel werden wir endlich unser erstes Programm mit Java erstellen, übersetzen und ausführen.</p>
<p><strong>&#8220;Hallo Welt!&#8221; auf der grünen Wiese</strong></p>
<p>Wir wenden uns wieder dem Vergleich mit der grünen Wiese zu. Wir wollen ein ganz neues Programmier-Projekt starten, das &#8220;Hallo Welt!&#8221;-Projekt. Wir stehen also hier auf der Wiese, nichts ist weit und breit zu sehen. Das bedeutet, dass wir einen neuen, leeren Unterordner in unserem bereits angelegten &#8220;Projekte&#8221;-Ordner anlegen. Dieses neue Verzeichnis nennen wir beispielsweise &#8220;Hallo_Welt&#8221;. Dann stellen wir den Zaun auf, in den nur wir als Programmierer hinein dürfen. Hiermit ist gemeint, dass wir in unserem bisher leeren Verzeichnis eine neue Textdatei anlegen. Das machen wir, indem wir einen Editor öffnen und von da aus die &#8220;Speichern&#8221;-Funktion ausführen. Diese neue Datei soll &#8220;HalloWelt.java&#8221; heißen. &#8220;HalloWelt&#8221; beschreibt, worum es in dieser Datei geht, und &#8220;.java&#8221; macht klar, dass es sich hierbei um Befehle in der Programmiersprache Java handelt.</p>
<p><strong>Output mit Schreibmaschine und Greifarm</strong></p>
<p>Was hat es mit dem &#8220;Hallo Welt!&#8221;-Programm auf sich? Um bei unserem Vergleich zu bleiben, ist &#8220;Hallo Welt!&#8221; folgendermaßen zu verstehen: Wir bauen uns innerhalb des Zauns eine Konstruktion zurecht, die, vielleicht mit einem Roboter an einer Schreibmaschine, &#8220;Hallo Welt!&#8221; auf ein Stück Papier tippt. Ein Greifarm nimmt dann das Papier von der Schreibmaschine und legt es auf das Output-Förderband, das Dinge durch eine der beiden Lücken im Zaun nach draußen transportiert. Diese Aufgabe (Papier beschriften und auf das Förderband legen) wird genau dann ausgeführt, wenn der Benutzer außen den roten Knopf betätigt.</p>
<p>Aus Sicht des Benutzers ist dies ja alles in allem schon eine recht interessante Maschine: Er drückt auf den Knopf, und ein Stück &#8220;Hallo Welt!&#8221;-beschriftetes Papier kommt heraus. Man könnte also sagen, das Programm begrüßt die Welt auf Knopfdruck. Der Benutzer kann so oft auf den Knopf drücken, wie er möchte. Da es Zauberpapier ist, wird es nie ausgehen, und auch der Roboter wird nie des Tippens müde. Es wird immer wieder ein Stück &#8220;Hallo Welt!&#8221;-Papier herauskommen.</p>
<p><strong>Java-Befehle schreiben<br />
</strong></p>
<p>Hier kommen wir nun also zu den ersten Java-Befehlen (die Zeilennummern gehören nicht dazu, nur der Text):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Wie versprochen werde ich alle Details des Programmierens, also auch diese ersten fünf Zeilen Java-Befehle, Zeichen für Zeichen, Wort für Wort, ganz genau und in allen Einzelheiten erklären. Es ist ganz normal, dass das wie verrücktes Kauderwelsch aussieht, wenn man der Sprache Java noch nie begegnet ist. Aber im Laufe der nächsten Artikel wird das alles klar und absolut verständlich werden. Versprochen! </p>
<p>Fürs Erste müssen wir diese fünf Zeilen Java-Befehle allerdings ohne Kenntnis deren genauer Bedeutung mit dem Editor in die Textdatei &#8220;HalloWelt.java&#8221; schreiben und speichern die Datei ab.</p>
<p><strong>Die Java-Befehle übersetzen</strong></p>
<p>Wir wollen nun diese Java-Befehle, bzw. die Datei, in der sie abgespeichert sind, übersetzen, und zwar in die Java-Zwischensprache.<br />
Für den Anfang gibt es hierfür eine einfache Möglichkeit. Und zwar haben wir ja das JDK installiert, bei dem Werkzeuge dabei sind, die ein Programmierer für seine tägliche Arbeit braucht. Eines dieser Werkzeuge ist genau für die Arbeit gedacht, die wir gerade vor uns haben, und zwar ein Java-Übersetzungs-Programm. Dieses Programm, das man &#8220;Übersetzer&#8221; oder &#8220;Compiler&#8221; nennt, ist ein Kommandozeilen-Programm. Es wurde mit dem JDK auf dem Computer installiert und wird deshalb nicht Kommando genannt, weil es nicht von Anfang an in der Kommandozeile verfügbar war.</p>
<p>Um unsere Java-Datei zu übersetzen, müssen wir zuerst mit dem Kommando &#8220;cd&#8221; in das Verzeichnis unseres Projektes navigieren. Die Kommandos, die man jetzt ausführen muss, sind natürlich immer unterschiedlich, je nach dem wo man gerade in der Konsole &#8220;steht&#8221; (welches das aktuelle Arbeitsverzeichnis in der Konsole ist) und wo wir das Projekte-Verzeichnis angelegt haben.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Gehen wir davon aus, dass in Windows das aktuelle Arbeitsverzeichnis in der Kommandozeile gerade folgendes ist (ausgehend davon, dass der angemeldete Windows-Benutzer &#8220;Stefan&#8221; heißt):</p>
<pre>C:\Dokumente und Einstellungen\Stefan</pre>
<p>Dann würde man mit den folgenden Kommandos zu unserem &#8220;Hallo Welt!&#8221;-Projektordner gelangen, vorausgesetzt natürlich, dieser wurde schon angelegt, und zwar in &#8220;Eigene Dateien&#8221; (z. B. mit dem Windows-Explorer):</p>
<pre>cd Eigene Dateien
cd Projekte
cd Hallo_Welt</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS gehen wir davon aus, dass das aktuelle Arbeitsverzeichnis das Home-Verzeichnis ist. Ein &#8220;pwd&#8221;-Kommando würde dann folgendes ausspucken (ausgehend davon, dass der angemeldete Benutzer gerade &#8220;Stefan&#8221; heißt):</p>
<pre>/home/Stefan</pre>
<p>Dann würde man mit den folgenden Kommandos zu unserem &#8220;Hallo Welt!&#8221;-Projektordner gelangen, vorausgesetzt natürlich, dieser wurde schon angelegt, und zwar im Home-Verzeichnis (z. B. mit einem Datei-Manager wie Nautilus in Linux mit Gnome, dem Konquerer unter Linux mit KDE oder Finder unter MacOS):</p>
<pre>cd Projekte
cd Hallo_Welt</pre>
</td>
</tr>
</tbody>
</table>
<p>Wenn wir jetzt in dem &#8220;Hallo_Welt&#8221;-Ordner stehen, dann müsste ein &#8220;<span style="font-weight: bold; color: blue;">dir</span>&#8221; bzw. ein &#8220;<span style="font-weight: bold; color: green;">ls</span>&#8221; uns genau eine Datei anzeigen, und zwar &#8220;HalloWelt.java&#8221;. Diese hatten wir zuvor mit dem Editor hier abgespeichert.</p>
<p>Jetzt ist nur noch eine weitere Eingabe nötig, um die Übersetzung vorzunehmen:</p>
<pre>javac HalloWelt.java</pre>
<p>Erklärung: &#8220;javac&#8221; ist das Java-Übersetzungs-Programm, von dem weiter oben die Rede war. &#8220;javac&#8221; steht für &#8220;java compiler&#8221; (&#8220;Java Übersetzer&#8221;). Nach einem Leerzeichen muss der volle Name der Datei angegeben werden, die wir übersetzen wollen (&#8220;HalloWelt.java&#8221;). Hat dies ohne Fehlermeldung funktioniert, sehen wir nach einem &#8220;dir&#8221; bzw. &#8220;ls&#8221;, dass plötzlich eine zweite Datei zu der von uns erstellen Datei &#8220;HalloWelt.java&#8221; hinzu gekommen ist. Diese Datei heißt &#8220;HalloWelt.class&#8221;. Sie wurde vom Compiler &#8220;javac&#8221; angelegt. Unsere Ursprungs-Datei &#8220;HalloWelt.java&#8221; wurde vom Compiler nicht verändert und liegt nach wie vor an der Stelle, an der wir sie angelegt haben.<br />
Übrigens kann dieser Übersetzungs-Schritt beliebig oft durchgeführt werden. Die .class-Datei wird dann dabei immer wieder überschrieben.</p>
<p><strong>Die Zwischensprache</strong></p>
<p>Die neue Datei &#8220;HalloWelt.class&#8221; ist die übersetzte Variante von &#8220;HalloWelt.java&#8221;. Spaßeshalber können wir die neu angelegte .class-Datei einmal mit dem Editor öffnen. Wie bereits gelernt, arbeitet man bei Java so, dass die Java-Befehle erst in eine Zwischensprache und dann in Maschinensprache übersetzt werden. Dieser soeben getätigte Schritt mit dem Compiler war der Übersetzungs-Vorgang von Java nach Zwischensprache. Im Editor sehen wir, dass wir nichts sehen. Unschwer ist zu erkennen, dass schon diese Zwischensprache nichts mehr ist, was ein Mensch verstehen können soll oder muss. Mit den vielen Sonderzeichen und unleserlichen Blöcken ähnelt die Zwischensprache viel mehr der Maschinensprache als unseren Java-Befehlen.</p>
<p><strong>Das Programm ausführen</strong></p>
<p>Nun also ist jetzt noch das zu tun, worauf wir die ganze Zeit schon gewartet haben. Wir wollen uns in die Rolle eines Benutzers begeben und bei unserer &#8220;Hallo Welt!&#8221;-Konstruktion auf den roten Knopf drücken. Dies geschieht, wenn wir folgendes in der Kommandozeile eingeben:</p>
<pre>java HalloWelt</pre>
<p>Achtung: Diesmal lautet das Programm, dass wir starten nicht &#8220;javac&#8221;, sondern &#8220;java&#8221;. Und wir schreiben nach &#8220;java&#8221; genau &#8220;HalloWelt&#8221;, nicht etwa &#8220;HalloWelt.java&#8221;, oder HalloWelt.class&#8221;. Wenn wir bis zu dieser Stelle alles richtig gemacht haben, sollte nach unserer Eingabe von gerade eben genau folgendes in die Kommandozeile geschrieben werden:</p>
<pre>Hallo Welt!</pre>
<p>Danach müsste in der Konsole der blinkende Cursor wieder auf neue Eingaben warten. Ein kleiner Schritt für einen Benutzer, aber ein großer Schritt für die Programmierer-Menschheit!</p>
<p>Was ist hier geschehen? Das zweite Programm, das wir gerade aus dem JDK kennen gelernt haben, heißt &#8220;java&#8221;. Wie der Name vielleicht schon vermuten lässt, ist dies das zentralste und wichtigste aller Programme aus dem Java-Umfeld. Damit lassen sich Programme, die in der Java-Zwischensprache vorliegen, in einem einzigen Schritt in Maschinensprache übersetzen und sofort ausführen. Dieses Programm ist übrigens genau so auch in der JRE vorhanden, weil es auch von Benutzern gebraucht wird, die Programme lediglich ausführen wollen und deshalb kein JDK brauchen.</p>
<p><strong>Benutzer und die Kommandozeile</strong></p>
<p>Vielleicht ist bereits die Frage aufgetaucht, ob sich ein Benutzer zum Starten eines Java-Programms immer in die Kommandozeile begeben muss, um Dinge wie </p>
<pre>java HalloWelt</pre>
<p>einzugeben, um ein Programm zu starten. Diese Befürchtung liegt nahe, weil wir das ja gerade auch getan haben, und wir waren ja eben in der &#8220;Benutzer-Rolle&#8221;. Die Antwort: Nein, ein Benutzer wird das nicht tun müssen. Unser kleines Programm liegt allerdings gerade in der &#8220;Roh-Fassung&#8221; vor und lässt sich zum jetzigen Zeitpunkt nur so starten. Später allerdings, wenn es fertiggestellt ist, kann es auf einem anderen Computer installiert werden und ist dann beispielsweise über ein Anwendungs-Menü aufzurufen, wie jedes andere Programm auch.</p>
<p><strong>Hallo schöne Java-Welt!</strong></p>
<p>Gegen Ende dieses Artikels, bzw. nachdem das Wichtigste in diesem Artikel schon besprochen wurde, nämlich das &#8220;Hallo Welt!&#8221;-Programm, möchte ich die Gelegenheit nutzen, um zwei Kleinigkeiten zu demonstrieren, die die Punkte, die wir durchlaufen haben, vertiefen bzw. verdeutlichen sollen.</p>
<p>Erstens werden wir eine kleine Änderung in unserer .java-Datei vornehmen. Wir haben der Tradition zuliebe das ehrwürdige &#8220;Hallo Welt!&#8221;-Programm geschrieben und der Pflicht damit genüge getan. Jetzt aber sind wir damit fertig und verändern das Programm.</p>
<p>Bei genauerer Betrachtung von Zeile 3 erkennen wir die Worte &#8220;Hallo Welt!&#8221;. Es sind exakt die Worte, die beim Starten des Programms in die Kommandozeile geschrieben wurden:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Wir verändern diese Zeile jetzt so, dass danach &#8220;Hallo schöne Java-Welt!&#8221; steht. Das sollte dann so aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo schöne Java-Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Was in den anderen Zeilen, bzw. vor oder nach &#8220;Hallo schöne Java-Welt!&#8221; steht, lassen wir unverändert. Dann übersetzen wir erneut mit folgender Eingabe:</p>
<pre>javac HalloWelt.java</pre>
<p>Und dann starten wir das Programm nochmal mit:</p>
<pre>java HalloWelt</pre>
<p>Das waren genau die selben Eingaben, die wir bereits getätigt haben. Jetzt sollte </p>
<pre>Hallo schöne Java-Welt!</pre>
<p>in die Kommandozeile geschrieben werden. Damit möchte ich wiederholt verdeutlichen, dass wir mit allem, was wir mit diesen und weiteren Java-Befehlen formulieren, bestimmen können, was unser Programm tut.</p>
<p>Zweitens möchte ich an dieser Stelle noch einmal den Unterschied von Programmierer und Benutzer, diesmal aber von technischer Seite her überdeutlich klarstellen. Dazu machen wir in der Kommandozeile nochmals folgende Eingabe:</p>
<pre>java HalloWelt</pre>
<p>Diese Eingabe machen wir in der Rolle des Benutzers, und wir sollten wieder unsere Konsolen-Ausgabe sehen. Jetzt löschen wir die Datei &#8220;HalloWelt.class&#8221;, die vom &#8220;javac&#8221;-Programm erzeugt wurde, und machen erneut folgende Eingabe:</p>
<pre>java HalloWelt</pre>
<p>Die exakt gleiche Eingabe erzeugt nun im Normalfall so eine Fehlermeldung:</p>
<pre>Exception in thread "main" java.lang.NoClassDefFoundError: HalloWelt
Caused by: java.lang.ClassNotFoundException: HalloWelt
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: HalloWelt.  Program will exit.</pre>
<p>Es wird deutlich: Ist die .class-Datei weg, kann das Programm nicht mehr wie zuvor gestartet werden, weil das Programm nicht übersetzt vorliegt.<br />
Deswegen übersetzen wir das Programm jetzt wieder, in der Rolle des Programmierers:</p>
<pre>javac HalloWelt.java</pre>
<p>Die .class-Datei ist wieder da, jetzt kann ein Benutzer das Programm auch wieder mit</p>
<pre>java HalloWelt</pre>
<p>starten. Um das ganze noch ins Extrem zu treiben, löschen wir zu Testzwecken jetzt auch einmal die Datei &#8220;HalloWelt.java&#8221;, also unsere Java-Befehle. Normalerweise würden wir das nicht tun. In die Java-Befehle ist unsere kreative Arbeit geflossen (unsere Konstruktion!), und die ist nach dem Löschen von .java-Dateien üblicherweise verloren. Jetzt sind es allerdings nur 5 Zeilen, die in diesem Artikel ja noch einfach nachzulesen sind. Das Übersetzen mit folgender Eingabe:</p>
<pre>javac HalloWelt.java</pre>
<p>ist jetzt verständlicherweise nicht mehr möglich. Wir bitten das Programm &#8220;javac&#8221; uns die Datei &#8220;HalloWelt.java&#8221; zu übersetzen, diese ist aber gar nicht da: das kann nicht funktionieren. Die Fehlermeldung:</p>
<pre>javac: file not found: HalloWelt.java
Usage: javac &lt;options&gt; &lt;source files&gt;
use -help for a list of possible options</pre>
<p>An dieser Stelle ist aber interessant und äußerst wichtig zu wissen: In unserer Benutzer-Rolle können wir trotzdem noch das Programm starten. Die Eingabe:</p>
<pre>java HalloWelt</pre>
<p>sollte uns die gleiche Ausgabe wie vorher bescheren:</p>
<pre>Hallo schöne Java-Welt!</pre>
<p>Hier wird also klar, dass der Benutzer zum Starten des Programms lediglich die .class-Datei, also das Programm in der Zwischensprache benötigt, nicht aber die .java-Datei, unsere Java-Befehle. Eine Rückwärts-Übersetzung von Zwischensprache nach normale Java-Befehle ist übrigens nur unter äußersten Umständen und in begrenztem Umfang möglich. In vielen Fällen ist dies gar nicht gewünscht und kann deshalb auch gezielt verhindert werden.</p>
<p><strong>Fazit</strong></p>
<p>In diesem Artikel haben wir das &#8220;Hallo Welt!&#8221;-Programm kennen gelernt. Wir haben dazu die Java-Befehle in eine Datei geschrieben. Diese haben wir mit dem Programm &#8220;javac&#8221; übersetzt, wo wir in diesem Schritt die Java-Zwischensprache in Form einer .class-Datei erhalten haben. Mit dieser und mit dem Programm &#8220;java&#8221; konnten wir das Programm so als Benutzer starten.<br />
Auch haben wir das Programm schon einmal verändert und neu übersetzt und ausgeführt. Des Weiteren wurde erklärt, dass ein Benutzer nur die .class-Datei braucht, um das Programm zu starten. Diese Datei kann aber nur von einem Programmierer mit &#8220;javac&#8221; aus dem JDK erzeugt werden, da nur der Programmierer die Java-Befehle in Form einer .java-Datei besitzt, und nur er das JDK installiert hat.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/147/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen – Teil 9 (Der Editor)</title>
		<link>http://iluzio.de/archives/282</link>
		<comments>http://iluzio.de/archives/282#comments</comments>
		<pubDate>Sun, 01 Jan 2012 21:49:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=282</guid>
		<description><![CDATA[In diesem Artikel geht es darum, was ein Editor ist und welche Editoren es gibt. Es wird erklärt, wozu man einen Editor braucht und wie man ihn benutzt. Der Editor Ein Editor ist vergleichbar mit einem Textverarbeitungsprogramm (Microsoft Word, OpenOffice &#8230; <a href="http://iluzio.de/archives/282">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, was ein Editor ist und welche Editoren es gibt. Es wird erklärt, wozu man einen Editor braucht und wie man ihn benutzt.</p>
<p><strong>Der Editor</strong></p>
<p>Ein Editor ist vergleichbar mit einem Textverarbeitungsprogramm (Microsoft Word, OpenOffice Writer, LibreOffice Writer). Man kann darin Text schreiben (editieren) und in Dateien abspeichern. Der Text in einem Editor ist nicht dazu gedacht, ausgedruckt zu werden. Deshalb gibt es keinen Seitenumbruch, sondern es kann beliebig weit nach unten geschrieben werden. Es ist, als wäre die Seite, auf die man schreibt, unendlich lang. Und auch in die Zeilenbreite, also nach rechts, gibt es keine Begrenzung.</p>
<p>Was man in einem Editor nicht macht, ist den Text zu formatieren, also etwa Schriftarten, Schriftgrößen oder Farben zu ändern. Daran erkennt man schon, dass es in einem Editor nicht um Design und Gestaltung geht, sondern rein um den Inhalt des Textes. Man nennt sie deshalb auch Texteditoren.</p>
<p>Meistens ist in einem Texteditor eine so genannte &#8220;nichtproportionale&#8221; Schriftart eingestellt, z. B. &#8220;Courier New&#8221;. Das bedeutet, der Buchstabe &#8220;i&#8221; ist genau so breit wie ein &#8220;m&#8221;, anders als dies bei einer &#8220;proportionalen&#8221; Schriftart der Fall ist. Der Grund hierfür ist die größere Übersichtlichkeit im Programmiersprachen-Text.</p>
<p><strong>Befehle formulieren</strong></p>
<p>Wir haben bereits gelernt, dass programmieren bedeutet, Befehle in einer Programmiersprache zu formulieren. Diese Befehle sagen genau aus, was der Zweck des Programms ist, was das Programm machen soll. Bisher war jedoch nicht klar, wie das genau geht: Wir müssen Befehle in der Programmiersprache Java als Text formulieren und in einem Texteditor niederschreiben. Diesen Text speichern wir dann in eine Datei ab. So können wir den Text jederzeit wieder verändern, wenn wir später eine Änderung am Programm vornehmen wollen. Genau dieser Text ist es, bzw. die Datei, in der dieser Text abgespeichert wurde, der dann in Maschinensprache, bzw. bei Java erst in eine Zwischensprache, dann in Maschinensprache, übersetzt wird.</p>
<p><strong>Von Java-Befehlen zum ausführbaren Programm</strong></p>
<p>So wird der Arbeitsvorgang langsam klarer: Der Programmierer schreibt Java-Befehle in einem Texteditor, speichert diese in eine Datei ab, die Datei wird in eine Zwischensprache übersetzt, an den Benutzer gegeben, der Benutzer übersetzt die Zwischensprache beim Starten des Programms automatisch in Maschinensprache, das Programm kann so ausgeführt werden.</p>
<p><strong>Verschiedene Editoren</strong></p>
<p>Es gibt viele verschiedene Texteditoren. Auf jedem Betriebssystem (Windows, Linux, MacOS, etc.) ist bereits mindestens ein Texteditor vorhanden, den wir für den Anfang auf jeden Fall verwenden können.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows ist dies schlicht der &#8220;Editor&#8221;, und liegt im Programm-Menü unter “Zubehör”.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux</td>
<td>Unter Linux kommt es darauf an, welche Variante von Linux (Ubuntu, Debian, openSUSE, Fedora, etc.) und welchen Fenster-Manager (Gnome, KDE, xfce, etc.) man verwendet. Je nach dem sind dann bestimmte Editoren vorinstalliert. Unter Gnome sind dies oft &#8220;gedit&#8221;, unter KDE beispielsweise &#8220;kate&#8221;. Diese liegen zumeist in einem &#8220;Zubehör&#8221;-Menü. Es können aber unzählige weitere Editoren beispielsweise über die entsprechende Paketverwaltung nachinstalliert werden.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">MacOS</td>
<td>In MacOS kann man &#8220;TextEdit&#8221; verwenden.</td>
</tr>
</tbody>
</table>
<p><strong>Ein Beispiel-Befehl</strong></p>
<p>An dieser Stelle öffnen wir zum ersten Mal einen Editor. Es ist meistens ein Fenster mit einem weißen Textbereich, der den größten Teil des Fensters einnimmt. Oben gibt es fast immer ein Menü mit Einträgen wie &#8220;Datei&#8221;, &#8220;Bearbeiten&#8221;, &#8220;Ansicht&#8221; usw&#8230;<br />
Wie in einem Textverarbeitungsprogramm kann man auch in einem Texteditor schreiben was man möchte. Ein Editor ist nämlich nicht speziell ein Programmier-Werkzeug. Es kann auch für die Einkaufsliste, ein Tagebuch oder beliebige andere Informationen in Textform verwendet werden. Auch viele Dateien, mit denen man ein Betriebssystem verwalten kann, werden üblicherweise mit Texteditoren bearbeitet.</p>
<p>Tippen wir doch einfach mal einen Befehl in den Editor ein:</p>
<pre>Computer, ich befehle Dir, addiere die Zahlen 3 und 5,
und schreibe das Ergebnis in die Kommandozeile.</pre>
<p>Diesen Befehl haben wir nun in &#8220;Deutsch&#8221;, nicht in &#8220;Java&#8221; formuliert. Das folgt erst im nächsten Schritt. Aber immerhin steht schon ein Befehl im Editor. Und diesen wollen wir jetzt in eine Datei abspeichern. Dazu wählen wir oben im Menü den Punkt <em>Datei &gt; Speichern</em>. Es öffnet sich ein &#8220;Speichern&#8221;-Fenster, weil der Editor wissen möchte, in welchem Ordner die Datei abgespeichert werden soll, und wie die Datei heißen soll.</p>
<p><strong>Speicherort und Dateiname</strong></p>
<p>Für jedes Programm, das wir entwickeln, sollten wir einen eigenen Ordner anlegen, weil jedes Programm auf seiner ganz eigenen grünen Wiese entwickelt wird. Alle Dateien, die mit dem Programm zu tun haben, werden in diesem Ordner abgelegt. Dazu gehören sowohl die Befehls-Dateien, die bei uns in der Programmiersprache Java geschrieben sind, als auch alle anderen Dokumente, die der Programmierer zur Erstellung des Programms benötigt. Das könnten Text- und Tabellen-Dokumente sein, die zur Planung des Programms verwendet werden. Aber es werden auch beispielsweise Grafiken und Musik-Dateien in diesem Ordner abgelegt, die dann direkt im Programm eingebaut werden, z. B. in einem Spiel.<br />
Es gibt keine Vorgabe, wo auf dem Computer der Ordner erstellt werden muss. Ein &#8220;Projekte&#8221;-Ordner, der alle zukünftigen Programm-Projekte beinhaltet, ist eine gute Idee. Dieser könnte dann unter <span style="font-weight: bold; color: blue;">Windows</span> in den <span style="font-weight: bold; color: blue;">&#8220;Eigenen Dateien&#8221;</span> liegen (<span style="font-weight: bold; color: green;">&#8220;Persönlicher Ordner&#8221; oder &#8220;Home&#8221;</span> unter <span style="font-weight: bold; color: green;">Linux</span>, <span style="font-weight: bold; color: green;">&#8220;Benutzerordner&#8221;</span> unter <span style="font-weight: bold; color: green;">MacOS</span>). Also legen wir diesen &#8220;Projekte&#8221;-Ordner jetzt an. Darin legen wir noch einen Unterordner &#8220;ErstesProjekt&#8221; an. Leerzeichen in Ordnernamen, sowie auch in Dateinamen, sind zwar erlaubt, aber vor Allem bei der Arbeit mit der Kommandozeile ist dies hinderlich und schafft unnötige Probleme. Deshalb sollten wir aus Gründen der Leserlichkeit statt Leerzeichen an entsprechenden Stellen Unterstriche oder &#8220;camel case&#8221; verwenden. &#8220;Camel case&#8221; bedeutet, Wörter so zusammen zu setzen, dass innerhalb eines Wortes mit einem Großbuchstaben begonnen wird, wie bei &#8220;ErstesProjekt&#8221;.</p>
<p>Als Dateinamen wählen wir für unser obiges Beispiel &#8220;ZweiZahlenAddieren.deutsch&#8221; aus. &#8220;ZweiZahlenAddieren&#8221; drückt ganz einfach den Zweck des Programms mit &#8220;camel case&#8221; aus, gefolgt von &#8220;.deutsch&#8221;. Dies wird &#8220;Dateiendung&#8221; oder &#8220;Dateinamens-Erweiterung&#8221; genannt. Allgemein ist eine Dateiendung dazu gedacht, zu beschreiben, um was für eine Datei es sich handelt, ohne dass man sich den Inhalt der Datei anschauen muss. Beispiele: Einfache Text-Dateien haben oft die Dateiendung &#8220;.txt&#8221;, also z. B. &#8220;Tagebuch.txt&#8221;. Microsoft Word-Dokumente heißen fast immer &#8220;.doc&#8221;, es gibt Videos, die mit &#8220;.mov&#8221;, für &#8220;Movie&#8221;, enden. Bei Dateien, die Programmiersprachen-Befehle enthalten, hat es sich eingebürgert, dass die Datenendung die Sprache bezeichnet, die die Datei enthält. Wir werden also viel mit &#8220;.java&#8221;-Dateien zu tun haben. Die Programmiersprache &#8220;C&#8221; ist immer in &#8220;.c&#8221;-Dateien zu finden, Pascal wird in &#8220;.pas&#8221;-Dateien abgespeichert. Um diese Konvention konsequent zu verwenden, und dass wir uns jetzt schon einmal daran gewöhnen, heißt unsere Beispiel-Datei &#8220;ZweiZahlenAddieren.deutsch&#8221;, weil der Befehl in Deutsch geschrieben ist.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td><strong>Dateinamens-Erweiterung in Windows anzeigen</strong></p>
<p>Eine Dateiendung gehört vollständig zum Datennamen dazu. Auf Windows-Computern wird diese Dateiendung aber zum Teil ausgeblendet, d. h. sie ist u. U. im Dateibrowser &#8220;Windows Explorer&#8221; nicht zu sehen. Von unserem kompletten Dateinamen &#8220;ZweiZahlenAddieren.deutsch&#8221; wäre dann nur &#8220;ZweiZahlenAddieren&#8221; sichtbar, &#8220;.deutsch&#8221; wäre unsichtbar. Dieses irreführende Verhalten des Windows Explorers wollen wir als Programmierer nicht haben. Gut, dass es sich abschalten lässt. Zu finden ist diese Funktion in den &#8220;Ordneroptionen&#8221;, sie heißt &#8220;Erweiterungen bei bekannten Dateitypen ausblenden&#8221;. Falls der Haken aktiviert sein sollte, muss man diesen einfach wegklicken und schon werden auch unter Windows korrekterweise bei allen Dateien die Endungen dargestellt.</td>
</tr>
</tbody>
</table>
<p><strong>Fazit</strong></p>
<p>Wir wissen nun, was ein Editor, bzw. ein Texteditor ist, und wozu man ihn braucht. Wir haben sogar schon eine erste Datei damit angelegt, die einen Programmiersprachen-Befehl enthält, allerdings in Deutsch, nicht in Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/282/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen – Teil 8 (Die Kommandozeile)</title>
		<link>http://iluzio.de/archives/217</link>
		<comments>http://iluzio.de/archives/217#comments</comments>
		<pubDate>Mon, 19 Dec 2011 10:48:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=217</guid>
		<description><![CDATA[In diesem Artikel geht es darum, was die Kommandozeile ist, wozu man sie braucht und wie man sie benutzt. Die Kommandozeile Jetzt endlich ist es an der Zeit, die Kommandozeile kennen zu lernen. Diese wird oft auch &#8220;Terminal&#8221; oder &#8220;Konsole&#8221; &#8230; <a href="http://iluzio.de/archives/217">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, was die Kommandozeile ist, wozu man sie braucht und wie man sie benutzt.</p>
<p><strong>Die Kommandozeile<br />
</strong></p>
<p>Jetzt endlich ist es an der Zeit, die Kommandozeile kennen zu lernen. Diese wird oft auch &#8220;Terminal&#8221; oder &#8220;Konsole&#8221; genannt, also falls diese Begriffe in Zukunft auftauchen, ist damit immer die Kommandozeile gemeint. Mit Hilfe der Kommandozeile können ganz bestimmte Programme, nämlich Kommandozeilen-Programme gestartet und bedient werden. Beispiel: Unser erstes Programm, das &#8220;Hallo Welt!&#8221;-Programm ist ein Kommandozeilen-Programm und wird deshalb im Rahmen einer Kommandozeile laufen. Rein prinzipiell könnte man ein Kommandozeilen-Programm auch außerhalb einer Kommandozeile ausführen. Nur dann wäre es dem Benutzer nicht möglich das Programm zu bedienen. Genau für diesen Zweck wird nämlich die Kommandozeile gebraucht: als Umgebung, um mit den Programmen, die in ihr laufen, Input und Output auszutauschen. Der Vollständigkeit halber möchte ich erwähnen, dass es eine Gattung von Programmen gibt, die tatsächlich ohne Dateneingabe und -ausgabe ihre Arbeit verrichten, so genannte Dienstprogramme. Das sind zumeist Betriebssystem-Programme, die im Hintergrund laufen und z. B. die Computer-Hardware überwachen. Solche Dienstprogramme sind in der Tat Kommandozeilen-Programme, die nicht in einer Kommandozeile laufen, sie sind aber eine Ausnahme.</p>
<p><strong>Eine Kommandozeile öffnen</strong></p>
<p>Wir werden jetzt einfach eine Kommandozeile starten. Auf jedem Betriebssystem hat sie einen anderen anderen Namen und ist an einer anderen Stelle in den Menüs zu finden.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows heißt sie &#8220;Eingabeaufforderung&#8221; und liegt im Programm-Menü unter &#8220;Zubehör&#8221;.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux</td>
<td>Unter Linux gibt es verschiedene Kommandozeilen, meistens mit dem Namen &#8220;Terminal&#8221;.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">MacOS</td>
<td>In MacOS heißt die Kommandozeile &#8220;Terminal&#8221; und ist in den &#8220;Dienstprogrammen&#8221; zu finden.</td>
</tr>
</tbody>
</table>
<p>Die Kommandozeile ist zumeist ein Fenster mit dunklem/schwarzem Hintergrund und heller/weißer Schrift. Irgendwo sollte ein Cursor blinken, dann ist die Kommandozeile (das Terminal) bereit, Benutzereingaben aufzunehmen.</p>
<p><strong>Das erste Programm starten</strong></p>
<p>Um ein beliebiges Programm im Rahmen des soeben geöffneten Terminals zu starten, gibt man einfach über die Tastatur den Namen eines Programms ein, gefolgt von einem Betätigen der Enter-Taste. Da wir selbst noch kein Programm erstellt haben, werden wir jetzt zu Anschauungs-Zwecken ein bereits existierendes Programm starten, das bei der Installation des Betriebssystems mitgeliefert wurde. Wir geben also mit der Tastatur folgendes ein:</p>
<pre>help</pre>
<p>Nach dieser Eingabe betätigen wir die Enter-Taste. Das Programm &#8220;help&#8221; spuckt einen ganzen Schwung an Text aus. Darunter (nach dem Text) sollte wieder der Cursor blinken.</p>
<p>Was ist hier passiert? Wir haben mit unserer Eingabe von &#8220;help&#8221; und der Enter-Taste sinnbildlich auf den roten Knopf des existierenden Programms &#8220;help&#8221; gedrückt. Dieses hat uns eine ganze Menge Text auf das Output-Förderband gelegt, den wir über die Kommandozeile angezeigt bekommen haben. Input hat &#8220;help&#8221; von uns nicht erhalten. Da der angezeigte Output der einzige Zweck, die einzige Funktion, von &#8220;help&#8221; ist, hat sich das Programm danach wieder beendet. Das sehen wir daran, dass in der Kommandozeile wieder der Cursor blinkt, was bedeutet, dass wir wieder etwas eingeben können. Zum Beispiel könnten wir &#8220;help&#8221; noch einmal starten. Es wird wieder der genau gleiche Output dargestellt werden, das ließe sich beliebig wiederholen. Immer wieder könnten wir &#8220;help&#8221; von Neuem ausführen, es würde einige Zeilen Output in die Kommandozeile schreiben, sofort danach ist help wieder beendet. Jedes erneute Aufrufen von &#8220;help&#8221; entspricht in unserem Vergleich der grünen Wiese einem neuen Drücken auf den roten Knopf.</p>
<p><strong>Kommandos</strong></p>
<p>Es gibt Programme, wie auch das Programm &#8220;help&#8221;, die gehören von Anfang an fest zu einer Kommandozeile dazu. Sie sind immer verfügbar, weil sie sozusagen mitgeliefert wurden. Diese Programme nennt man &#8220;Kommandos&#8221;. Technisch gesehen besteht kein Unterschied zwischen einem Programm und einem Kommando. Kommandos wurden genau wie Programme &#8220;programmiert&#8221;. Sie tragen nur den Namen &#8220;Kommando&#8221;, damit man gleich weiß, dass es Programme sind, die zur Kommandozeile gehören, sie sind fest eingebaut.<br />
Manche dieser Kommandos ähneln sich unter Windows, Linux oder MacOS sehr stark, und manche sind in den Kommandozeilen der verschiedenen Betriebssysteme total unterschiedlich. Dabei ist noch zu erwähnen, dass die Kommandos, die wir in dieser Artikel-Serie verwenden, in Linux und MacOS genau gleich sind. Das hat den Grund, dass Linux und MacOS in ihrem Kern verwandte Betriebssysteme sind.<br />
Unsere eigenen Programme, sowohl das &#8220;Hallo Welt!&#8221;-Programm, das wir zuerst entwickeln, als auch unser Spiel, werden nicht Kommandos genannt. Diese Programme laufen zwar in die Kommandozeile ab, sind aber kein fester Bestandteil dieser.</p>
<p><strong>In der Kommandozeile navigieren</strong></p>
<p>Schauen wir uns einmal den Windows-Explorer, oder auch jeden anderen Datei-Browser wie Nautilus in Linux mit Gnome, den Konquerer unter Linux mit KDE oder beispielsweise Finder unter MacOS, an. Wir sehen, dass man bei der Benutzung immer an einer bestimmten Stelle, an einem bestimmten Ort &#8220;steht&#8221;. Man nennt dies das &#8220;aktuelle Arbeitsverzeichnis&#8221;. Es ist der Ordner, den man sich gerade ansieht, also alle Dateien und Unterverzeichnisse, die sich darin befinden. Durch einen Doppelklick auf einen Unterordner &#8220;springt&#8221; man dorthin, das aktuelle Arbeitsverzeichnis hat sich geändert und ist nun dieser Unterordner. Und meistens gibt es einen &#8220;Zurück&#8221;-Knopf, mit dem man zum letzten besuchten Verzeichnis zurückkehren kann. Auf diese Weise kann man zu allen Verzeichnissen auf dem Computer navigieren und mit den Dateien arbeiten.</p>
<p>Und genau so gibt es auch in der Kommandozeile dieses &#8220;aktuelle Arbeitsverzeichnis&#8221;. Meistens wird es vor dem blinkenden Cursor angezeigt. Man kann es sich aber auch mit einem Programm (einem Kommando) anzeigen lassen.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows heißt das Kommando &#8220;cd&#8221;, für &#8220;current directory&#8221; (aktuelles Verzeichnis):</p>
<pre>cd</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS heißt das Kommando &#8220;pwd&#8221;, für &#8220;print working directory&#8221; (drucke Arbeitsverzeichnis):</p>
<pre>pwd</pre>
</td>
</tr>
</tbody>
</table>
<p>Genau wie das Kommando &#8220;help&#8221; schreibt uns &#8220;<span style="font-weight: bold; color: blue;">cd</span>&#8221; bzw. &#8220;<span style="font-weight: bold; color: green;">pwd</span>&#8221; auch etwas in die Kommandozeile, nämlich in welchem Verzeichnis wir uns gerade befinden.<br />
Achtung: Die Verzeichnisse werden unter <span style="font-weight: bold; color: blue;">Windows</span> mit einem <span style="font-weight: bold; color: blue;">rückwärtigen Schrägstrich &#8220;\&#8221;</span> voneinander getrennt, in <span style="font-weight: bold; color: green;">Linux und MacOS</span> ist es ein <span style="font-weight: bold; color: green;">normaler Schrägstrich &#8220;/&#8221;</span>.</p>
<p>Jetzt kennen wir aber noch nicht den Inhalt dieses aktuellen Arbeitsverzeichnisses. Anders als in einem herkömmlichen Datei-Browser müssen wir es nämlich explizit von dem Kommandozeile anfordern, wenn wir wissen wollen, wie es in dem Verzeichnis aussieht, in dem wir uns gerade befinden. Dafür gibt es ein weiteres Kommando.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows heißt das Kommando &#8220;dir&#8221;, für &#8220;directory&#8221; (Verzeichnis):</p>
<pre>dir</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS heißt das Kommando &#8220;ls&#8221;, für &#8220;list&#8221; (Auflistung):</p>
<pre>ls</pre>
</td>
</tr>
</tbody>
</table>
<p>Nach Eingabe von &#8220;<span style="font-weight: bold; color: blue;">dir</span>&#8221; bzw. &#8220;<span style="font-weight: bold; color: green;">ls</span>&#8221; erscheinen die Dateien und Unterordner des aktuellen Verzeichnisses.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Was ein Unterverzeichnis und was eine Datei ist, erkennt man in der Windows-Kommandozeile an dem &#8220;&lt;DIR&gt;&#8221;. Das steht für &#8220;directory&#8221; (Verzeichnis). </td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux/MacOS erkennt man den Unterschied zwischen einer Datei und einem Unterverzeichnis entweder an der Farbe, manchmal sind Verzeichnisse aber auch durch ein &#8220;d&#8221; (directory) gekennzeichnet.</td>
</tr>
</tbody>
</table>
<p>Das Kommando &#8220;<span style="font-weight: bold; color: blue;">dir</span>&#8221; bzw. &#8220;<span style="font-weight: bold; color: green;">ls</span>&#8221; ist sozusagen unser Auge in der Kommandozeile.</p>
<p>Jetzt müssen wir noch wissen, wie wir das aktuelle Arbeitsverzeichnis in der Kommandozeile ändern, d. h. wie wir zu einem anderen Verzeichnis, z. B. einem Unterordner wechseln können.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows benutzt man dazu das selbe Kommando, wie zum Anzeigen des aktuellen Arbeitsverzeichnisses, nämlich &#8220;cd&#8221;, allerdings mit einer Erweiterung. Und zwar gibt man nach dem &#8220;cd&#8221; und einem Leerzeichen den Namen eines Unterordners an:</p>
<pre>cd Bilder</pre>
<p>Dieses Kommando macht nur Sinn, wenn man mit der Kommandozeile an einem aktuellen Arbeitsverzeichnis steht, an dem es auch einen Unterordner &#8220;Bilder&#8221; gibt. In diesem Fall wird dorthin gewechselt. Falls es keinen Unterordner mit dem Namen &#8220;Bilder&#8221; geben sollte, wird eine Fehlermeldung ausgegeben und man bleibt am aktuellen Ort stehen. Zur Überprüfung, ob die Navigation geklappt hat, gibt man unter Windows einfach wieder &#8220;cd&#8221; ein, und lässt sich so das jetzt hoffentlich geänderte Arbeitsverzeichnis ausgeben.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS heißt das Kommando zum wechseln des aktuellen Arbeitsverzeichnisses auch &#8220;cd&#8221;. Und es funktioniert auch genau so wie unter Windows:</p>
<pre>cd Bilder</pre>
<p>Um hier allerdings zu überprüfen, ob die Navigation geklappt hat, gibt man unter Linux und MacOS &#8220;pwd&#8221; ein, und lässt sich mit diesem Kommando das jetzt hoffentlich geänderte Arbeitsverzeichnis ausgeben.</td>
</tr>
</tbody>
</table>
<p>Wir sind gerade in ein Unterverzeichnis &#8220;hineingewechselt&#8221;. Um wieder ein Verzeichnis zurück zu wechseln, also eine Verzeichnis-Ebene nach oben, kann man sowohl unter Windows, als auch unter Linux und MacOS folgendes Kommando benutzen:</p>
<pre>cd ..</pre>
<p>Die zwei Zeichen &#8220;..&#8221; bezeichnen in der Kommando-Zeile allgemein immer das übergeordnete Verzeichnis, egal wo man gerade steht. Wir werden später auch noch mit anderen Kommandos auf &#8220;..&#8221; stoßen. Jedenfalls müssten wir mit &#8220;cd ..&#8221; wieder genau da landen, wo wir vorher waren.</p>
<p>Mit diesen gerade gelernten Kommandos kann man genau wie in einem Datei-Browser durch alle Verzeichnisse auf dem Computer navigieren: Wir können in Verzeichnisse hinein- und wieder zurückwechseln und uns an den Orten, wo wir gerade stehen, den Inhalt anzeigen lassen.</p>
<p><strong>Fazit</strong></p>
<p>In diesem Artikel haben wir gelernt, dass eine Kommandozeile eine Umgebung ist, in der man Kommandozeilen-Programme starten und mit ihnen Input und Output austauschen kann. Wir haben zum Ausprobieren das Programm &#8220;help&#8221; gestartet und Output erhalten.<br />
Wir wissen auch, dass Programme, die direkt mit der Kommandozeile zu tun haben &#8220;Kommandos&#8221; heißen, und wir haben ein paar dieser Kommandos kennen gelernt, um in der Konsole navigieren zu können.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/217/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 7 (Java)</title>
		<link>http://iluzio.de/archives/182</link>
		<comments>http://iluzio.de/archives/182#comments</comments>
		<pubDate>Mon, 19 Dec 2011 02:22:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[JRE]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Programmiersprache]]></category>
		<category><![CDATA[Übersetzen]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=182</guid>
		<description><![CDATA[In diesem Artikel wird erklärt, was wir tun müssen, um mit der Programmiersprache Java arbeiten zu können und wie ein Benutzer unsere erstellen Programme verwenden kann. Java Wie bereits erklärt, kann ein Computer im Grunde nur seine Ur-Sprache, die Maschinensprache, &#8230; <a href="http://iluzio.de/archives/182">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel wird erklärt, was wir tun müssen, um mit der Programmiersprache Java arbeiten zu können und wie ein Benutzer unsere erstellen Programme verwenden kann.</p>
<p><strong>Java</strong></p>
<p>Wie bereits erklärt, kann ein Computer im Grunde nur seine Ur-Sprache, die Maschinensprache, verstehen. Alle anderen Programmiersprachen können nur deshalb funktionieren, weil sie wieder in Maschinensprache übersetzt werden. Der Computer wird im Inneren also nie die Java sprechen können. Java dient uns Programmierern nur als Hilfsmittel, weil Java eine schöne und logisch aufgebaute Sprache ist. Die Maschinensprache wiederum ist komplex und unleserlich. Deshalb schreiben wir unsere Programme mit Java lassen diese dann in Maschinensprache übersetzten. So haben wir hinterher ein Programm, das der Computer verstehen kann, ohne dass wir Programmierer selbst die Maschinensprache verstehen müssen.</p>
<p>Auch haben wir gelernt, dass es bei der Erstellung eines Programms zwei Gruppen von Personen gibt. Die einen erstellen (programmieren) das Programm: die Entwickler. Die anderen benutzen das Programm: die Benutzer. Das Übersetzen eines Programms in Maschinensprache ist Aufgabe des Programmierers. Ein Benutzer kann mit dem Programm nur in bereits übersetzter Maschinensprachen-Form etwas anfangen, weil sein Computer nur diese Sprache spricht. Keine Angst, das Übersetzten muss nicht von Hand gemacht werden. Dafür bekommt der Programmierer alles Notwendige an die Hand, man denke an den Werkzeugkoffer auf der grünen Wiese. Das dauert bei kleineren Programmen nur wenige Sekunden. Diese Werkzeuge, um als Programmierer mit Java zu arbeiten, fehlen im Normalfall auf einem herkömmlichen Benutzer-Computer und müssen deshalb noch installiert werden. Darum geht es in diesem Artikel.</p>
<p><strong>Die Übersetzung</strong></p>
<p>Bei Java (wie auch bei anderen modernen Programmiersprachen) gibt es noch eine wichtige Besonderheit: Auch zum Starten von Programmen, die mit Java erstellt wurden, muss auf dem Computer noch etwas installiert werden, sofern das nicht schon getan wurde. Warum ist das so? Weiter oben habe ich erklärt, dass Programme in einer bestimmten Programmiersprache (bei uns Java) vom Programmierer in Maschinensprache übersetzt werden, und dass dieses übersetzte Programm von einem Benutzer, bzw. dessen Computer direkt verstanden werden kann, weil der Computer Maschinensprache versteht. Das ist auch richtig. Bei Programmiersprachen wie beispielsweise C, C++ und Pascal wird es genau so gemacht.</p>
<p>Tatsache ist aber, dass Java-Programme nicht auf direktem Weg in Maschinensprache übersetzt werden, sondern erst über einen Umweg in eine so genannte Zwischensprache. Das Programm wird in dieser Zwischensprache an den Benutzer gegeben. Dieser braucht dann wiederum auch ein Werkzeug, um den zweiten und letzten Übersetzungs-Schritt von der Zwischensprache zur Maschinensprache zu gehen. Das hört sich komplizierter an, als es tatsächlich ist. In der Realität bekommt der Benutzer von diesem zweiten Übersetzungs-Schritt überhaupt nichts mit. Wenn er ein Programm starten möchte, das mit Java erstellt wurde, geschieht das, wie bei jedem anderen Programm auch, vermutlich über den Doppelklick auf ein Icon auf dem Desktop oder aus einem Programm-Menü heraus. Für ihn unsichtbar wird nun die Übersetzung von Zwischensprache in Maschinensprache vollzogen.</p>
<p>Als kleinen Blick über unseren Java-Tellerrand möchte ich erklären, dass sich die Programmiersprachen in dieser Hinsicht so in drei Gruppen einteilen lassen. Erstens Sprachen wie C, C++, Pascal und viele weitere, die komplett fertig in Maschinensprache übersetzt an den Benutzer gegeben werden. Des Weiteren Sprachen wie Java und die .NET-Sprachen von Microsoft, die in Form einer Zwischensprache beim Benutzer ankommen und dort in einem zweiten Schritt in Maschinensprache übersetzt werden. Die dritte Gruppe von Programmiersprachen wurden bisher noch nicht erwähnt. Hierzu zählen beispielsweise BASIC, PHP und noch einige mehr. Diese Sprachen werden überhaupt nicht übersetzt, sondern landen unübersetzt beim Benutzer. Erst beim Starten des Programms auf dem Benutzer-Computer findet eine Übersetzung statt.<br />
Jede dieser drei Gruppen hat durch ihre ganz einzigartige Technik Vor- und Nachteile, die sich im Laufe der Zeit als Programmierer noch herausstellen werden. Nur so viel sei gesagt: Java, sowie auch die .NET-Sprachen, geht mit dem Zwischenschritt der Übersetzung zu einer Zwischensprache einen gut ausbalancierten Mittelweg.</p>
<p><strong>JRE oder JDK</strong></p>
<p>Für diese beiden Anwendungsgebiete im Java-Umfeld, für Benutzer oder Programmierer, gibt es zwei unterschiedliche Pakete, die auf einem Computer installiert werden können: JRE oder JDK.</p>
<p>JRE steht ausgeschrieben für Java Runtime Environment (Java Laufzeitumgebung). Die Laufzeitumgebung ist banal ausgedrückt eine Umgebung, um Java-Programme laufen zu lassen, also zu verwenden. Genauer ausgedrückt kann die JRE Programme, die in der Java-Zwischensprache vorliegen, in die Maschinensprache übersetzen. Folglich ist die JRE das Modul für Benutzer.</p>
<p>JDK bedeutet Java Development Kit (Java Entwickler-Austattung). Wie der Name hier schon genau ausdrückt, ist das JDK die Austattung, die ein Java-Entwickler braucht. Es enthält die Funktion, Java-Programme in die Java-Zwischensprache zu übersetzen, die dann an Benutzer weiter gegeben werden kann.<br />
Weil die Entwickler auch gleichzeitig die Benutzer ihrer eigenen Programme sind, ist es nur logisch und sinnvoll, dass die Entwickler-Austattung auch eine vollwertige Laufzeitumgebung enthält. Installiert man also ein JDK, ist eine JRE automatisch mit dabei.</p>
<p><strong>JDK installieren</strong></p>
<p>Sowohl die JRE, als auch das JDK, kann ganz einfach installiert werden. Die genaue Installations-Vorgehensweise ist allerdings von Betriebssystem zu Betriebssystem unterschiedlich.</p>
<p>Ab hier kommt es in dieser Artikel-Serie öfters vor, dass sich Erklärungen und Beschreibungen von einem Betriebssystem zum anderen unterscheiden. Drei Gruppen von Betriebs-Systemen werden berücksichtigt: Windows, Linux und MacOS. Die betreffenden Stellen mit unterschiedlichem Inhalt werde ich farblich markieren. Windows bekommt die Farbe blau, Linux und MacOS teilen sich die Farbe grün. Das hat den Grund, dass viele Erklärungen, jedoch nicht alle, für Linux und MacOS zusammengefasst werden können.<br />
Natürlich reicht es, nur den Text des eigenen Betriebssystems zu lesen. Schaden kann es aber sicher nicht, zumindest ab und zu einmal in die anderen Betriebssysteme rein zu schnuppern. Zu neugierig kann man beim Programmieren eigentlich nie sein.</p>
<p>Und hier haben wir schon den ersten Fall:</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Für Windows-Betriebssysteme gibt es einen JDK-Download (natürlich auch einen JRE-Download) auf der <a title="Oracle Internet-Seite" href="http://oracle.com" target="_blank">Oracle Internet-Seite</a> im Bereich Java-Downloads. Java wird aktuell von der Firma Oracle verwaltet. Dieser Download muss lediglich auf dem Computer installiert werden. Danach ist der Computer für die Software-Entwicklung mit Java ausgestattet.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux</td>
<td>Auch für Linux-Betriebssysteme gibt es einen JDK-Download bei Oracle. Bei verbreiteten Linux-Varianten wie Ubuntu, Debian, openSUSE, Fedora und weiteren würde ich allerdings die Installation über eine Paketverwaltung empfehlen. Bei Ubuntu beispielsweise bietet sich hier das Software-Center oder für fortgeschrittene Benutzer &#8220;synaptic&#8221; oder &#8220;apt&#8221; an.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">MacOS</td>
<td>Ähnliches gilt für MacOS-Betriebssysteme, wo das JDK über die Funktion &#8220;Software Update&#8221; installiert werden kann.</td>
</tr>
</tbody>
</table>
<p><strong>Fazit</strong></p>
<p>Wir haben Java auf unserem Computer installiert, und zwar die Variante von Java, mit der wir neue Programme erstellen können (JDK), nicht nur bereits bestehende Programme starten (JRE).</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 6 (Input und Output)</title>
		<link>http://iluzio.de/archives/257</link>
		<comments>http://iluzio.de/archives/257#comments</comments>
		<pubDate>Sun, 18 Dec 2011 10:58:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[ausgabe]]></category>
		<category><![CDATA[eingabe]]></category>
		<category><![CDATA[fenster]]></category>
		<category><![CDATA[grafische benutzerschnittstelle]]></category>
		<category><![CDATA[Hallo Welt]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[kommandozeile]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[programm]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=257</guid>
		<description><![CDATA[In diesem Artikel werden wir analysieren, wie ein Benutzer mit einem Programm arbeitet. Und wir werden lernen, dass es verschiedene Arten von Programmen gibt, die auch unterschiedlich bedient werden. Input und Output Ein Beispiel: In einem Internet-Browser gibt es oben &#8230; <a href="http://iluzio.de/archives/257">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel werden wir analysieren, wie ein Benutzer mit einem Programm arbeitet. Und wir werden lernen, dass es verschiedene Arten von Programmen gibt, die auch unterschiedlich bedient werden.</p>
<p><strong>Input und Output</strong></p>
<p>Ein Beispiel: In einem Internet-Browser gibt es oben eine Adresszeile, in die der Benutzer die Adresse einer Internet-Seite eingeben kann, zu der er gerne navigieren möchte. Diese Adress-Zeile ist ein Eingabe-Element, womit eine Information in das Programm &#8220;eingegeben&#8221; werden kann. Dieser Vorgang nennt sich &#8220;Input&#8221;. Mit diesem Input ruft der Benutzer eine Funktion des Internet-Browsers auf, und zwar die Navigation zu eben genau dieser Internet-Seite. Der Browser führt die Funktion aus und stellt dann die gewünschte Internet-Seite im großen Anzeigefeld dar, das die größte Fläche im Layout des Browsers einnimmt. Das wiederum nennt man &#8220;Output&#8221;.<br />
Aus dieser Kombination von Input und Output ergibt sich, wie man das Programm bedient. Ein Benutzer gibt Daten in ein Programm ein und betätigt über Schaltflächen bestimmte Funktionen des Programms (Input). Das Programm führt intern seine Funktionen aus und stellt Daten und Ergebnisse dar (Output). Damit kann der Benutzer dann weiterarbeiten und ggf. neue Daten eingeben und andere Funktionen aufrufen, die wiederum Output erzeugen.</p>
<p>An dieser Stelle kehren wir wieder einmal kurz zum Vergleich der grünen Wiese zurück. Da war nämlich von zwei Lücken im Zaun die Rede. Durch jede dieser zwei Lücken ist ein Förderband angebracht. Eines ist so eingestellt, dass es Dinge nach außerhalb des Zauns transportiert, das andere läuft in die Richtung, dass es Dinge nach innen transportiert. Diese zwei Förderbänder stellen eine grundlegende Verbindung zwischen innerhalb und außerhalb des Zauns her.<br />
Die Förderbänder stehen sinnbildlich für Input und Output. Ein Benutzer kann etwas auf das Input-Förderband legen und so Daten in das Programm &#8220;eingeben&#8221;. Das Programm wiederum kann durch das Output-Förderband Daten an den Benutzer &#8220;ausgeben&#8221;.</p>
<p><strong>Fenster oder Text</strong></p>
<p>Programme lassen sich aus der Sicht eines Benutzers grob in zwei Kategorien einteilen:</p>
<p>Die meisten Programme, die ein durchschnittlicher Benutzer Tag für Tag verwendet, sind Programme, die in einem Fenster ablaufen, also z. B. der Internet-Browser oder ein Taschenrechner-Programm. Programme im Fenster werden auch Programme mit einer &#8220;grafischen Benutzerschnittstelle&#8221; genannt. Das bedeutet, die &#8220;Schnittstelle&#8221;, also die Verbindung zwischen den Programm-Funktionen und dem Benutzer, der das Programm bedient, findet auf eine grafische Art und Weise statt. Mit &#8220;grafisch&#8221; sind hier keine Grafiken/Bilder gemeint, sondern dass das Fenster, in dem das Programm läuft, ein Layout besitzt: Bestimmte Ein- und Ausgabe-Elemente sind sinnvoll angeordnet, wie beispielsweise die Adress-Zeile oder das große Anzeigefeld im Internet-Browser. Diese Ein- und Ausgabe-Elemente sind interaktiv, sie lassen sich mit der Maus anklicken, Menüs können aufgeklappt werden, ein Anzeige-Text kann seine Farbe ändern und weitere Fenster können erscheinen (z. B. ein Fenster mit einer Fehlermeldung oder für Programm-Einstellungen).</p>
<p>Programme der zweiten Kategorie besitzen keine grafische Benutzerschnittstelle. Da es für fast alle Anwendungsgebiete eines normalen Computer-Benutzers Programme mit grafischer Benutzerschnittstelle gibt, führen Programme ohne grafische Benutzerschnittstelle im Leben eines Benutzers ein Schattendasein. Anders sieht dies allerdings für die Programmierung aus. Hier haben solche Programme, nämlich Kommandozeilen-Programme, eine größere Bedeutung. Die Besonderheit von Kommandozeilen-Programmen ist, dass die Dateneingabe durch den Benutzer und die Datenausgabe durch das Programm rein in Textform stattfindet. Was genau die &#8220;Kommandozeile&#8221; ist und wie sie funktioniert, wird im Folgenden noch genau erklärt.</p>
<p>An dieser Stelle ist wichtig: Grundlegend gibt es keinen Unterschied zwischen der Programmierung eines Programms mit grafischer Benutzerschnittstelle oder eines Kommandozeilen-Programms. Lediglich Stellen im Programm, in denen es um Input und Output, also Dateneingabe und -ausgabe geht, müssen entsprechend anders programmiert werden. Ein Programm besteht aber aus vielen weiteren Teilen. Sieht man von Input und Output ab, gestaltet sich die Programmierung eines Programms mit grafischer Benutzerschnittstelle und eines Kommandozeilen-Programms exakt gleich. Aufgrund dieser Tatsache kann auch nachträglich ein Kommandozeilen-Programm in ein Programm mit grafischer Benutzerschnittstelle &#8220;umprogrammiert&#8221; werden, ohne dass man das komplette Programm umschreiben muss. Lediglich die Teile, die Input und Output betreffen, müssen umgeschrieben werden.</p>
<p>Wir werden mit Kommandozeilen-Programmierung beginnen. Das ist verglichen mit einer grafischen Benutzerschnittstelle zwar etwas unspektakulär, dafür aber für den Anfang auch viel einfacher. Und wie bereits erwähnt, lässt sich dies später auch leicht umstellen.</p>
<p><strong>Fazit</strong></p>
<p>Wir haben gelernt, dass man Informationen mit einem Programm austauscht, während man es benutzt. Dies wird Input und Output genannt. Bei Kommandozeilen-Programmen findet Input und Output in reiner Textform statt. Bei Programmen, die in einem oder mehreren Fenstern ablaufen, spricht man von Programmen mit grafischer Benutzerschnittstelle.<br />
Das &#8220;Hallo Welt!&#8221;-Programm ist ein Kommandozeilen-Programm.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/257/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 5 (Der rote Knopf)</title>
		<link>http://iluzio.de/archives/144</link>
		<comments>http://iluzio.de/archives/144#comments</comments>
		<pubDate>Tue, 15 Nov 2011 01:44:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[ausführen]]></category>
		<category><![CDATA[befehle]]></category>
		<category><![CDATA[benutzer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[programmierer]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=144</guid>
		<description><![CDATA[Dieser Artikel beschreibt, wie man den Befehlen, die man in einer Programmiersprache formuliert hat, Leben einhaucht, also dafür sorgt, dass die Befehle ausgeführt werden. Der rote Knopf Bisher ist bekannt, dass wir sinnbildlich eine Konstruktion innerhalb des Zauns auf unserer &#8230; <a href="http://iluzio.de/archives/144">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dieser Artikel beschreibt, wie man den Befehlen, die man in einer Programmiersprache formuliert hat, Leben einhaucht, also dafür sorgt, dass die Befehle ausgeführt werden.</p>
<p><strong>Der rote Knopf</strong></p>
<p>Bisher ist bekannt, dass wir sinnbildlich eine Konstruktion innerhalb des Zauns auf unserer Wiese errichten, also Java-Befehle formulieren müssen, um ein Programm zu erhalten. Hier ist es wichtig zu wissen: Wenn wir auf der Wiese eine Konstruktion erfinden und zusammen bauen, so verrichtet diese anfänglich ihre Arbeit erst einmal noch nicht. An der Außenseite des Zauns, ganz in der Nähe der zwei Lücken, die ich bereits erwähnt habe, ist ein roter Knopf angebracht. Die Konstruktion im inneren des Zauns erfüllt ihre Arbeit erst dann, wenn jemand von außen diesen Knopf betätigt. Erst diese Aktion haucht der Konstruktion Leben ein, versorgt sie mit Energie, wenn man so will.</p>
<p>Zuerst denkt sich der Programmierer innerhalb des Zauns eine Konstruktion aus. Diese Konstruktion tut aber noch nichts, der Programmierer konstruiert in der Hoffnung, dass sie später genau das erledigt, was sie soll. Danach muss außerhalb des Zauns auf den roten Knopf gedrückt werden, um die Konstruktion zu aktivieren. Üblicherweise wird auch diese Aufgabe vom Programmierer erledigt. Er begibt sich also nach draußen, drückt auf den roten Knopf und sieht zu, ob die Konstruktion genau das tut, wofür sie erfunden wurde. Wenn sie es tut, freut er sich und begibt sich wieder nach innen, um weiter zu bauen. Die Konstruktion soll ja mit der Zeit immer mehr können. Hat der Programmierer die Konstruktion für eine neue Aufgabe erweitert und angepasst, geht&#8217;s wieder nach draußen, um den roten Knopf zu drücken. Erfüllt die Konstruktion die neu hinzu gekommene Aufgabe? Erfüllt sie auch noch ihre bisherigen Aufgaben? Der Programmierer prüft, ob alles stimmt.</p>
<p>Jetzt ist es so, dass Konstruktionen mit der Zeit immer ausgefeilter und komplexer werden. Die Aufgaben, die sie erfüllen sollen, werden schwieriger und dauern länger, bis sie erledigt sind. Vielleicht muss ein Hamster erst einmal 5 Minuten im Laufrad laufen, um das Gummiband soweit aufzurollen, bis es&#8230;. usw.<br />
Fehler können sich einschleichen und die Konstruktion macht etwas falsch. Dann begibt sich der Programmierer wieder innerhalb des Zauns und versucht den Fehler zu finden und zu korrigieren. Danach geht&#8217;s wieder nach draußen, um den roten Knopf zu drücken. Mit dem Finden von Fehlern und Einbauen neuer Komponenten verbringt der Programmierer seine Zeit. Er wechselt ständig von innerhalb des Zauns nach außerhalb und wieder zurück.</p>
<p>Irgendwann ist aber endlich der Zeitpunkt erreicht, an der die Konstruktion alle Aufgaben, für die sie vorgesehen ist, ohne Fehler ausführt. Dies ist der freudige Augenblick, an dem man einen Nicht-Programmierer, also einen Programm-Benutzer, an den Zaun einladen kann. Dieser soll nun auf den roten Knopf drücken und staunen, was die Konstruktion alles kann! Der Programmierer sieht dem Benutzer vielleicht noch eine Weile zu, irgendwann lässt er ihn dann aber allein am Zaun und legt er sich auf einen Liegestuhl in die Sonne. Sollten dann doch wieder Fehler auftauchen, muss der Programmierer wieder ran. Raus aus dem Liegestuhl und zurück zur Konstruktion! Denn wie bereits gehört, darf nur ein Programmierer innerhalb des Zauns, und nur er hat das nötige Werkzeug, um die Konstruktion zu reparieren.</p>
<p><strong>Fazit</strong></p>
<p>Mit diesem Artikel sollte verdeutlicht werden, dass sich innerhalb des Zauns der Programmierer befindet, und außerhalb des Zauns der Benutzer. Wenn ein Programm allerdings noch nicht fertig ist, wird der Software-Entwickler selbst zum Benutzer, in dem er nach außen geht und auf den roten Knopf drückt, um seine eigene Konstruktion, sein eigenes Programm, auszuprobieren. Somit ist der Programmierer immer der erste Benutzer eines Programms, vor Allem wenn es noch gar nicht fertig ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 4 (Die grüne Wiese)</title>
		<link>http://iluzio.de/archives/15</link>
		<comments>http://iluzio.de/archives/15#comments</comments>
		<pubDate>Tue, 15 Nov 2011 01:13:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>

		<guid isPermaLink="false">http://iluzio.de:81/iluziowp/?p=15</guid>
		<description><![CDATA[In folgendem Artikel versuche ich die Vorgehensweise beim Programmieren zu erklären, also wie man aus dem Nichts heraus etwas erschafft, und zwar ein Programm. Das versuche ich mit einem Vergleich zu erklären. Die grüne Wiese Mit Vergleichen ist das immer &#8230; <a href="http://iluzio.de/archives/15">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In folgendem Artikel versuche ich die Vorgehensweise beim Programmieren zu erklären, also wie man aus dem Nichts heraus etwas erschafft, und zwar ein Programm. Das versuche ich mit einem Vergleich zu erklären.</p>
<p><strong>Die grüne Wiese</strong></p>
<p>Mit Vergleichen ist das immer so eine Sache. Oft können sie ein Thema gut veranschaulichen, manchmal stehen Sie einem eher im Weg. Ich möchte an dieser Stelle einen Vergleich anwenden, bei dem hoffentlich überwiegend Ersteres zutrifft.</p>
<p>Stell dir vor, du stehst auf einer großen grünen Wiese. Mit Brettern zäunst einen Bereich ein, und dann stellst du dich innerhalb dieses Bereichs. Der nun eingezäunte Bereich dieser Wiese ist dein Programm. Nur du als Programmierer darfst hinein. Alle anderen müssen draußen bleiben. An zwei Stellen im Zaun machst du die Bretter nicht durchgängig, sondern lässt zwei kleine Lücken frei. Wozu diese Lücken gut sind, werde ich später noch näher erklären. Du hast eine Werkzeugkiste dabei, auf der ein Schriftzug aufgedruckt ist: &#8220;Java&#8221;. Mit allem, was in der Werkzeugkiste ist, kannst du dich jetzt innerhalb deines Bereichs austoben. Du kannst bauen und basteln&#8230;</p>
<p>Mit dem Vergleich der grünen Wiese möchte ich die Brücke zum Programmieren schlagen. Es soll anschaulich gemacht werden, was wir für die Programmierung unseres kleinen Spiels benötigen. Im Folgenden werde ich noch etwas ausführlicher:</p>
<p>Ich habe schon erklärt, dass man dem Computer Befehle geben muss, die ausdrücken, was genau in einem Programm geschehen soll. Diese Befehle müssen in einer Programmiersprache formuliert werden, die in unserem Falle &#8220;Java&#8221; heißt. Diesen Vorgang, die Formulierung von Befehlen in einer Programmiersprache, nennt man &#8220;programmieren&#8221;. Der Vergleich mit der Wiese und dem Zaun fordert an dieser Stelle ein klein wenig Vorstellungskraft. Es geht darum, wie die Java-Befehle aussehen würden, wenn man sie auf dieser Wiese mit Werkzeug baute. Ich stelle mir immer eine abenteuerliche Konstruktion aus Zahnrädern, Federn, Gummibändern und all solchen Sachen vor. Vielleicht gibt es roboter-artige Greifarme, Magneten, Sensoren und Hamster in Laufrädern.<br />
All diese Komponenten, die sinnbildlich für unsere Java-Befehle stehen, spielen zusammen und ergeben ein Programm. Viele Einzelkomponenten werden gebraucht, damit das Programm eine komplexe Aufgabe erfüllen kann. Diese Komponenten sind miteinander verbunden und erledigen nur in Zusammenarbeit ihre Pflicht.</p>
<p><strong>Fazit</strong></p>
<p>In diesem Artikel ging es darum, dass man mit vielen kleinen Teilen, nämlich Befehlen in der Sprache Java, einen größeren Zweck erfüllen kann, wenn diese Teile sinnvoll zusammen arbeiten.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>back online &#8230;</title>
		<link>http://iluzio.de/archives/129</link>
		<comments>http://iluzio.de/archives/129#comments</comments>
		<pubDate>Sun, 13 Nov 2011 15:58:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[iluZio online]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=129</guid>
		<description><![CDATA[iluZio.de ist wieder erreichbar! Nach ein paar Jahren Abwesenheit soll es hier wieder um Spiele- und Anwendungsentwicklung im weitesten Sinne gehen. Und das in neuem Design, bei dem ich versucht habe, es an das alte anzulehnen: Viel Spaß!]]></description>
			<content:encoded><![CDATA[<p>iluZio.de ist wieder erreichbar!</p>
<p>Nach ein paar Jahren Abwesenheit soll es hier wieder um Spiele- und Anwendungsentwicklung im weitesten Sinne gehen. Und das in neuem Design, bei dem ich versucht habe, es an das alte anzulehnen:</p>
<p><a href="http://iluzio.de/wp-content/uploads/2011/11/Bildschirmfoto1.png"><img class="alignnone size-full wp-image-132" title="iluZio.de Wayback Machine" src="http://iluzio.de/wp-content/uploads/2011/11/Bildschirmfoto1.png" alt="" width="1000" height="421" /></a></p>
<p>Viel Spaß!</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/129/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

