diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100171.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100171.html | 361 |
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"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100167.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100170.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100172.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100173.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </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öglichkeiten, Daten
+unter Java auszudrucken. Die aufwä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ü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änden sehr groß, 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ängigen Steuersequenzen.
+Zweitens ist das Verfahren nicht sonderlich portabel. Zwar gibt es
+das Communication API als JDK-Standarderweiterung sowohl für
+SOLARIS als auch für Windows, auf anderen Systemen steht es aber
+unter Umständen nicht zur Verfügung. Auch Drucker, die nicht
+über die serielle oder paralle Schnittstelle angesteuert werden
+(z.B. USB- oder Netzwerkdrucker), können auf diese Weise naturgemäß
+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"> Warnung </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ächst ist die Installationsdatei <font color="#660099">javacomm20-win32.zip</font>
+in ein separates Verzeichnis zu entpacken.
+<li>Nun mü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ü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änden anders vorzugehen. Weitere Informationen
+kö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ügbarem Port enthält.
+Zusä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ö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ück, je nachdem, ob es sich um eine parallele oder serielle
+Schnittstelle handelt.
+
+<p>
+Soll über einen Port kommuniziert werden, muss sein zugehö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ö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 Öffnen gewartet wird, an.
+Der Rü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ü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ügung,
+mit denen Kommunikationsparameter eingestellt, Puffergrößen
+geändert oder Portzustände abgefragt werden können.
+Zudem bieten beide Klassen die Möglichkeit, Event-Listener zu
+registrieren, die bei Zustandsänderungen oder eingehenden Daten
+automatisch benachrichtigt werden. Wir wollen auf all diese Möglichkeiten
+nicht weiter eingehen; sie werden in der Dokumentation ausfü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 über die parallele Schnittstelle Daten an
+einen Drucker schickt. Es durchsucht zunächst die Liste aller
+Schnittstellen nach einem Parallelport mit dem Namen »LPT1«
+(unter UNIX müsste dieser Name entsprechend angepasst werden).
+Dieser wird geö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ünfzig
+Zeilen lang Teilstrings von »Hello LPT1 World« aus und sendet
+dann das Seitenendezeichen »\f« an den Drucker. Zum Schluß
+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 <= 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"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </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"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100170.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100172.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100173.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
