summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100171.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100171.html')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/html/k100171.html361
1 files changed, 361 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100171.html b/Master/Reference Architectures and Patterns/hjp5/html/k100171.html
new file mode 100644
index 0000000..463a90d
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/html/k100171.html
@@ -0,0 +1,361 @@
+<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100167.html;106,k100170.html;107,k100172.html;108,k100173.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100167.html">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100170.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100172.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100173.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
+<td align="right">Kapitel 26 - Drucken
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id026004"></a>
+<h2>26.4 Zugriff auf serielle und parallele Schnittstellen </h2>
+<hr>
+<ul>
+<li><a href="k100171.html#sectlevel2id026004">26.4 Zugriff auf serielle und parallele Schnittstellen</a>
+<ul>
+<li><a href="k100171.html#javacommapi">26.4.1 Das Java Communications API</a>
+<ul>
+<li><a href="k100171.html#sectlevel4id026004001001">Installation</a>
+<li><a href="k100171.html#sectlevel4id026004001002">Prinzipielle Arbeitsweise</a>
+</ul>
+<li><a href="k100171.html#sectlevel3id026004002">26.4.2 Ein einfaches Beispielprogramm</a>
+</ul>
+</ul>
+<hr>
+
+<p>
+Sollten die in den vorangegangenen Abschnitten vorgestellten Drucktechniken
+nicht funktionieren oder auf Grund praktischer Schwierigkeiten nicht
+einsetzbar sein, gibt es eine Reihe anderer M&ouml;glichkeiten, Daten
+unter Java auszudrucken. Die aufw&auml;ndigste und flexibelste von
+ihnen besteht darin, die Druckdaten selbst aufzubereiten und direkt
+an die serielle oder parallele Schnittstelle zu senden, an der der
+Drucker angeschlossen ist. Wir wollen in diesem Abschnitt kurz skizzieren,
+wie das mit Hilfe des <a name="ixa101735"><i>Java Communications API</i></a>
+durchgef&uuml;hrt werden kann.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Vor Einsatz dieser Technik sollten ihre Nachteile bedacht werden.
+Einerseits ist der Aufwand unter Umst&auml;nden sehr gro&szlig;, denn
+die Anwendung muss alle Low-Level-Details der Druckeransteuerung selbst
+implementieren. Das umfasst die Auswahl und Belegung der Schnittstelle
+ebenso wie das Generieren der druckerabh&auml;ngigen Steuersequenzen.
+Zweitens ist das Verfahren nicht sonderlich portabel. Zwar gibt es
+das Communication API als JDK-Standarderweiterung sowohl f&uuml;r
+SOLARIS als auch f&uuml;r Windows, auf anderen Systemen steht es aber
+unter Umst&auml;nden nicht zur Verf&uuml;gung. Auch Drucker, die nicht
+&uuml;ber die serielle oder paralle Schnittstelle angesteuert werden
+(z.B. USB- oder Netzwerkdrucker), k&ouml;nnen auf diese Weise naturgem&auml;&szlig;
+nicht angesteuert werden.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF">&nbsp;Warnung&nbsp;</font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="javacommapi"></a>
+<h3>26.4.1 Das Java Communications API </h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id026004001001"></a>
+<h4>Installation </h4>
+
+<p>
+Das Java Communications API ist eine <i>Standarderweiterung</i> des
+JDK und recht einfach zu installieren. Es kann von <a href="http://java.sun.com/products/javacomm/index.html">http://java.sun.com/products/javacomm/index.html</a>
+heruntergeladen oder der DVD zum Buch entnommen werden. Bei vorhandener
+J2SE 6.0 sieht die Installation wie folgt aus:
+<ul>
+<li>Zun&auml;chst ist die Installationsdatei <font color="#660099">javacomm20-win32.zip</font>
+in ein separates Verzeichnis zu entpacken.
+<li>Nun m&uuml;ssen einige Dateien kopiert werden (wir gehen hier
+davon aus, dass das JDK sich im Verzeichnis <font color="#660099">c:\jdk1.6</font>
+befindet):
+<ul>
+<li><font color="#660099">win32com.dll</font> nach <font color="#660099">c:\jdk1.6\jre\bin</font>
+<li><font color="#660099">comm.jar</font> nach <font color="#660099">c:\jdk1.6\jre\lib\ext</font>
+<li><font color="#660099">javax.comm.properties</font> nach <font color="#660099">c:\jdk1.6\jre\lib</font>
+</ul>
+</ul>
+
+<p>
+F&uuml;r die J2SE 6.0 ist die Installation des Communications APIs
+nun abgeschlossen. Bei einem anderen JDK oder auf einem anderen Betriebssystem
+ist unter Umst&auml;nden anders vorzugehen. Weitere Informationen
+k&ouml;nnen der Datei <font color="#660099">Readme.html</font> entnommen
+werden.
+
+<!-- Section -->
+
+<a name="sectlevel4id026004001002"></a>
+<h4>Prinzipielle Arbeitsweise </h4>
+
+<p>
+Das Communications API liegt im Paket <a name="ixa101736"><a href="index_j.html#ixb101341"><font color=#000080><tt>javax.comm</tt></font></a></a>.
+Die Klasse <a name="ixa101737"><a href="index_c.html#ixb101342"><font color=#000080><tt>CommPortIdentifier</tt></font></a></a>
+dient zur Beschreibung von Kommunikationsports. Sie besitzt eine statische
+Methode <a name="ixa101738"><a href="index_g.html#ixb101343"><font color=#000080><tt>getPortIdentifiers</tt></font></a></a>,
+mit der eine <a href="index_e.html#ixb100122"><font color=#000080><tt>Enumeration</tt></font></a>
+von <a href="index_c.html#ixb101342"><font color=#000080><tt>CommPortIdentifier</tt></font></a>-Objekten
+erzeugt werden kann, die ein Element je verf&uuml;gbarem Port enth&auml;lt.
+Zus&auml;tzlich kann mit der statischen Methode <a name="ixa101739"><a href="index_g.html#ixb101344"><font color=#000080><tt>getPortIdentifier</tt></font></a></a>
+auch direkt auf einen namentlich bekannten Port zugegriffen werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static Enumeration getPortIdentifiers()
+
+public static CommPortIdentifier getPortIdentifier(String portName)
+ throws NoSuchPortException
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/comm/CommPortIdentifier.html" onClick="this.href=getApiDoc('javax.comm.CommPortIdentifier')"><font color="#660066" size=-1>javax.comm.CommPortIdentifier</font></a></td>
+</tr>
+</table>
+
+<p>
+Wurde ein <a href="index_c.html#ixb101342"><font color=#000080><tt>CommPortIdentifier</tt></font></a>
+beschafft, k&ouml;nnen seine Eigenschaften abgefragt werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public String getName()
+
+public int getPortType()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/comm/CommPortIdentifier.html" onClick="this.href=getApiDoc('javax.comm.CommPortIdentifier')"><font color="#660066" size=-1>javax.comm.CommPortIdentifier</font></a></td>
+</tr>
+</table>
+
+<p>
+<a name="ixa101740"><a href="index_g.html#ixb100667"><font color=#000080><tt>getName</tt></font></a></a>
+liefert den Namen des Ports (z.B. "COM1" oder "LPT1" unter Windows,
+"/dev/..." unter UNIX). <a name="ixa101741"><a href="index_g.html#ixb101345"><font color=#000080><tt>getPortType</tt></font></a></a>
+gibt entweder <a name="ixa101742"><a href="index_p.html#ixb101346"><font color=#000080><tt>PORT_PARALLEL</tt></font></a></a>
+oder <a name="ixa101743"><a href="index_p.html#ixb101347"><font color=#000080><tt>PORT_SERIAL</tt></font></a></a>
+zur&uuml;ck, je nachdem, ob es sich um eine parallele oder serielle
+Schnittstelle handelt.
+
+<p>
+Soll &uuml;ber einen Port kommuniziert werden, muss sein zugeh&ouml;riger
+<a href="index_c.html#ixb101342"><font color=#000080><tt>CommPortIdentifier</tt></font></a>
+durch Aufruf von <a name="ixa101744"><a href="index_o.html#ixb101348"><font color=#000080><tt>open</tt></font></a></a>
+ge&ouml;ffnet werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public synchronized CommPort open(String appname, int timeout)
+ throws PortInUseException
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/comm/CommPortIdentifier.html" onClick="this.href=getApiDoc('javax.comm.CommPortIdentifier')"><font color="#660066" size=-1>javax.comm.CommPortIdentifier</font></a></td>
+</tr>
+</table>
+
+<p>
+Die beiden Parameter geben den Namen der zu verwendenden Applikation
+und die maximale Zeitspanne, die beim &Ouml;ffnen gewartet wird, an.
+Der R&uuml;ckgabewert von <a href="index_o.html#ixb101348"><font color=#000080><tt>open</tt></font></a>
+ist vom typ <a name="ixa101745"><a href="index_c.html#ixb101349"><font color=#000080><tt>CommPort</tt></font></a></a>
+und kann in eine der (daraus abgeleiteten) Klassen <a name="ixa101746"><a href="index_p.html#ixb101350"><font color=#000080><tt>ParallelPort</tt></font></a></a>
+oder <a name="ixa101747"><a href="index_s.html#ixb101351"><font color=#000080><tt>SerialPort</tt></font></a></a>
+umgewandelt werden.
+
+<p>
+Die wichtigsten Methoden von <a href="index_c.html#ixb101349"><font color=#000080><tt>CommPort</tt></font></a>
+sind <a name="ixa101748"><a href="index_g.html#ixb100671"><font color=#000080><tt>getInputStream</tt></font></a></a>
+und <a name="ixa101749"><a href="index_g.html#ixb100672"><font color=#000080><tt>getOutputStream</tt></font></a></a>.
+Sie beschaffen die zum Lesen bzw. Schreiben von Daten verwendeten
+Streams:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public InputStream getInputStream()
+ throws IOException
+
+public OutputStream getOutputStream()
+ throws IOException
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/comm/CommPort.html" onClick="this.href=getApiDoc('javax.comm.CommPort')"><font color="#660066" size=-1>javax.comm.CommPort</font></a></td>
+</tr>
+</table>
+
+<p>
+Dar&uuml;ber hinaus stellen <a href="index_c.html#ixb101349"><font color=#000080><tt>CommPort</tt></font></a>
+und die daraus abgeleiteten Klassen einige Methoden zur Verf&uuml;gung,
+mit denen Kommunikationsparameter eingestellt, Puffergr&ouml;&szlig;en
+ge&auml;ndert oder Portzust&auml;nde abgefragt werden k&ouml;nnen.
+Zudem bieten beide Klassen die M&ouml;glichkeit, Event-Listener zu
+registrieren, die bei Zustands&auml;nderungen oder eingehenden Daten
+automatisch benachrichtigt werden. Wir wollen auf all diese M&ouml;glichkeiten
+nicht weiter eingehen; sie werden in der Dokumentation ausf&uuml;hrlich
+beschrieben.
+
+<!-- Section -->
+
+<a name="sectlevel3id026004002"></a>
+<h3>26.4.2 Ein einfaches Beispielprogramm </h3>
+
+<p>
+Zum Abschluss dieses Abschnitts soll ein einfaches Beispielprogramm
+gezeigt werden, das &uuml;ber die parallele Schnittstelle Daten an
+einen Drucker schickt. Es durchsucht zun&auml;chst die Liste aller
+Schnittstellen nach einem Parallelport mit dem Namen &#187;LPT1&#171;
+(unter UNIX m&uuml;sste dieser Name entsprechend angepasst werden).
+Dieser wird ge&ouml;ffnet, und mit <a href="index_g.html#ixb100672"><font color=#000080><tt>getOutputStream</tt></font></a>
+ein <a href="index_o.html#ixb100673"><font color=#000080><tt>OutputStream</tt></font></a>
+zum Schreiben von Daten beschafft. Nun gibt das Programm f&uuml;nfzig
+Zeilen lang Teilstrings von &#187;Hello LPT1 World&#171; aus und sendet
+dann das Seitenendezeichen &#187;\f&#171; an den Drucker. Zum Schlu&szlig;
+werden Ausgabestream und Port geschlossen und das Programm beendet.
+<a name="listingid026004"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing2604.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
+<font color="#555555">004 </font><font color="#0000AA">import</font> java.io.*;
+<font color="#555555">005 </font><font color="#0000AA">import</font> javax.comm.*;
+<font color="#555555">006 </font>
+<font color="#555555">007 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing2604
+<font color="#555555">008 </font>{
+<font color="#555555">009 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> printHello(Writer out)
+<font color="#555555">010 </font> <font color="#0000AA">throws</font> IOException
+<font color="#555555">011 </font> {
+<font color="#555555">012 </font> String s = <font color="#0000FF">"Hello LPT1 World"</font>;
+<font color="#555555">013 </font> s += <font color="#0000FF">" "</font> + s + <font color="#0000FF">" "</font> + s;
+<font color="#555555">014 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> i = 1; i &lt;= 50; ++i) {
+<font color="#555555">015 </font> out.write(s.substring(0, i) + <font color="#0000FF">"\r\n"</font>);
+<font color="#555555">016 </font> }
+<font color="#555555">017 </font> out.write(<font color="#0000FF">"\f"</font>);
+<font color="#555555">018 </font> }
+<font color="#555555">019 </font>
+<font color="#555555">020 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">021 </font> {
+<font color="#555555">022 </font> Enumeration en = CommPortIdentifier.getPortIdentifiers();
+<font color="#555555">023 </font> <font color="#0000AA">while</font> (en.hasMoreElements()) {
+<font color="#555555">024 </font> CommPortIdentifier cpi = (CommPortIdentifier)en.nextElement();
+<font color="#555555">025 </font> <font color="#0000AA">if</font> (cpi.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
+<font color="#555555">026 </font> <font color="#0000AA">if</font> (cpi.getName().equals(<font color="#0000FF">"LPT1"</font>)) {
+<font color="#555555">027 </font> <font color="#0000AA">try</font> {
+<font color="#555555">028 </font> ParallelPort lpt1 = (ParallelPort)cpi.open(
+<font color="#555555">029 </font> <font color="#0000FF">"LPT1Test"</font>,
+<font color="#555555">030 </font> 1000
+<font color="#555555">031 </font> );
+<font color="#555555">032 </font> OutputStreamWriter out = <font color="#0000AA">new</font> OutputStreamWriter(
+<font color="#555555">033 </font> lpt1.getOutputStream()
+<font color="#555555">034 </font> );
+<font color="#555555">035 </font> printHello(out);
+<font color="#555555">036 </font> out.close();
+<font color="#555555">037 </font> lpt1.close();
+<font color="#555555">038 </font> System.exit(0);
+<font color="#555555">039 </font> } <font color="#0000AA">catch</font> (PortInUseException e) {
+<font color="#555555">040 </font> System.err.println(e.toString());
+<font color="#555555">041 </font> System.exit(1);
+<font color="#555555">042 </font> } <font color="#0000AA">catch</font> (IOException e) {
+<font color="#555555">043 </font> System.err.println(e.toString());
+<font color="#555555">044 </font> System.exit(1);
+<font color="#555555">045 </font> }
+<font color="#555555">046 </font> }
+<font color="#555555">047 </font> }
+<font color="#555555">048 </font> }
+<font color="#555555">049 </font> }
+<font color="#555555">050 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing2604.java"><font color="#000055" size=-1>Listing2604.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 26.4: Druckausgabe an LPT1</i></p>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100167.html">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100170.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100172.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100173.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
+<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>