Date: Fri, 10 Nov 2023 15:11:48 +0100
Subject: add new repo
---
.../hjp5/html/k100171.html | 361 +++++++++++++++++++++
1 file changed, 361 insertions(+)
create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100171.html
(limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100171.html')
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 @@
+
+
+
+Handbuch der Java-Programmierung, 5. Auflage
+
+
+
+
+
+
+
+
+
+
+
+
+26.4 Zugriff auf serielle und parallele Schnittstellen
+
+
+
+
+
+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 Java Communications API
+durchgeführt werden kann.
+
+
+
+
+
+
+26.4.1 Das Java Communications API
+
+
+
+
+Installation
+
+
+Das Java Communications API ist eine Standarderweiterung des
+JDK und recht einfach zu installieren. Es kann von http://java.sun.com/products/javacomm/index.html
+heruntergeladen oder der DVD zum Buch entnommen werden. Bei vorhandener
+J2SE 6.0 sieht die Installation wie folgt aus:
+
+- Zunächst ist die Installationsdatei javacomm20-win32.zip
+in ein separates Verzeichnis zu entpacken.
+
- Nun müssen einige Dateien kopiert werden (wir gehen hier
+davon aus, dass das JDK sich im Verzeichnis c:\jdk1.6
+befindet):
+
+- win32com.dll nach c:\jdk1.6\jre\bin
+
- comm.jar nach c:\jdk1.6\jre\lib\ext
+
- javax.comm.properties nach c:\jdk1.6\jre\lib
+
+
+
+
+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 Readme.html entnommen
+werden.
+
+
+
+
+
Prinzipielle Arbeitsweise
+
+
+Das Communications API liegt im Paket javax.comm.
+Die Klasse CommPortIdentifier
+dient zur Beschreibung von Kommunikationsports. Sie besitzt eine statische
+Methode getPortIdentifiers,
+mit der eine Enumeration
+von CommPortIdentifier-Objekten
+erzeugt werden kann, die ein Element je verfügbarem Port enthält.
+Zusätzlich kann mit der statischen Methode getPortIdentifier
+auch direkt auf einen namentlich bekannten Port zugegriffen werden:
+
+
+
+
+
+
+public static Enumeration getPortIdentifiers()
+
+public static CommPortIdentifier getPortIdentifier(String portName)
+ throws NoSuchPortException
+
+
+ |
+
+javax.comm.CommPortIdentifier |
+
+
+
+
+Wurde ein CommPortIdentifier
+beschafft, können seine Eigenschaften abgefragt werden:
+
+
+
+
+getName
+liefert den Namen des Ports (z.B. "COM1" oder "LPT1" unter Windows,
+"/dev/..." unter UNIX). getPortType
+gibt entweder PORT_PARALLEL
+oder PORT_SERIAL
+zurück, je nachdem, ob es sich um eine parallele oder serielle
+Schnittstelle handelt.
+
+
+Soll über einen Port kommuniziert werden, muss sein zugehöriger
+CommPortIdentifier
+durch Aufruf von open
+geöffnet werden:
+
+
+
+
+Die beiden Parameter geben den Namen der zu verwendenden Applikation
+und die maximale Zeitspanne, die beim Öffnen gewartet wird, an.
+Der Rückgabewert von open
+ist vom typ CommPort
+und kann in eine der (daraus abgeleiteten) Klassen ParallelPort
+oder SerialPort
+umgewandelt werden.
+
+
+Die wichtigsten Methoden von CommPort
+sind getInputStream
+und getOutputStream.
+Sie beschaffen die zum Lesen bzw. Schreiben von Daten verwendeten
+Streams:
+
+
+
+
+
+
+public InputStream getInputStream()
+ throws IOException
+
+public OutputStream getOutputStream()
+ throws IOException
+
+
+ |
+
+javax.comm.CommPort |
+
+
+
+
+Darüber hinaus stellen CommPort
+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.
+
+
+
+
+
26.4.2 Ein einfaches Beispielprogramm
+
+
+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 getOutputStream
+ein OutputStream
+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.
+
+
+
+
+
+
+
+
+001 /* Listing2604.java */
+002
+003 import java.util.*;
+004 import java.io.*;
+005 import javax.comm.*;
+006
+007 public class Listing2604
+008 {
+009 public static void printHello(Writer out)
+010 throws IOException
+011 {
+012 String s = "Hello LPT1 World";
+013 s += " " + s + " " + s;
+014 for (int i = 1; i <= 50; ++i) {
+015 out.write(s.substring(0, i) + "\r\n");
+016 }
+017 out.write("\f");
+018 }
+019
+020 public static void main(String[] args)
+021 {
+022 Enumeration en = CommPortIdentifier.getPortIdentifiers();
+023 while (en.hasMoreElements()) {
+024 CommPortIdentifier cpi = (CommPortIdentifier)en.nextElement();
+025 if (cpi.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
+026 if (cpi.getName().equals("LPT1")) {
+027 try {
+028 ParallelPort lpt1 = (ParallelPort)cpi.open(
+029 "LPT1Test",
+030 1000
+031 );
+032 OutputStreamWriter out = new OutputStreamWriter(
+033 lpt1.getOutputStream()
+034 );
+035 printHello(out);
+036 out.close();
+037 lpt1.close();
+038 System.exit(0);
+039 } catch (PortInUseException e) {
+040 System.err.println(e.toString());
+041 System.exit(1);
+042 } catch (IOException e) {
+043 System.err.println(e.toString());
+044 System.exit(1);
+045 }
+046 }
+047 }
+048 }
+049 }
+050 }
+
+ |
+
+Listing2604.java |
+
+
+
+Listing 26.4: Druckausgabe an LPT1