# Seriellen Port unter Windows ansprechen



## eve (23. Mai 2004)

Also habe das neueste JDK installiert. Man sollte doch meinen da wäre eine Unterstütung für eine Kommunikation über den seriellen Port integriert. Aber nein....

Habe also diese omniöse Datei javacomm20-win32.zip runtergeladen und bin der ReadMe gefolgt



> If you are installing the Java communications API into a JRE (Java runtime environment) follow the same instructions as for the JDK except where noted. See the additional instructions for running using the JRE.
> 
> Copy win32com.dll to your <JDK>\bin directory.
> 
> ...



Aber wenn ich das mitgeführte Beispiel ausprobieren will meckert Jedit immer das das package javax.comm nicht existiert. 

Das einzgiste was ich vielleicht falsch mache ist den Classpath setzen. Die Kommandozeile gibt mir da kein Feedback. Wo kann ich das überprüfen. Oder wo sonst kann das Problem liegen?

Geht es vielleicht ganz anders (*raste bald aus)?


----------



## L-ectron-X (23. Mai 2004)

Wenn Du ein neues SDK herunter geladen hast, decken sich die Pfadangaben nicht mit denen der in Deinem Zitat geposteten Beschreibung. Denn seit dem JDK 1.2 sind andere Pfade zu verwenden. Dann musst Du so vorgehen:

die Datei *win32.com.dll* kopierst Du ins Verzeichnis *\jre\bin* Deiner SDK-Installation.
die Datei *comm.jar* kopierst Du ins Verzeichnis *\jre\lib\ext* Deiner SDK-Installation.
die Datei *javax.comm.properties* kopierst Du ins Verzeichnis *\jre\lib* Deiner SDK-Installation.

Bestimmte Sachen kann man aber auch mit der comm-API nicht programmieren. Speziell Hardware nahe Sachen.


----------



## eve (23. Mai 2004)

Vielen Dank. Da sollte aber SUN mal die Dateien updaten. Schließlich habe ich die ReadMe von der offiziellen Seite.


----------



## eve (23. Mai 2004)

Grrr. Langsam regt mich SUN auf. DIe sollten mal anständige ReadMe schreiben.

Hab mit deiner Hilfe die Dateien in die richtigen Ordner verschoben. Die Kompilierung des Beispiels erfolgte nun auch erfolgreich. Jedoch will das Beispiel nicht starten. 

Es bricht ab mit Exception in Main [...]

NoClassDefFoundError: javax/comm/commPortIdentifier

[...]

Toll damit findet damit findet er die wichtigste Klasse nicht....

Was könnte falsch sein?

MfG.Eve

P.S. Ich frage mich warum das nicht standardmäßig ins JDK integriert ist.


----------



## L-ectron-X (23. Mai 2004)

Ich habe hier die Version 2, da ist schon die aktuelle Beschreibung dabei.
Zeigst Du mal etwas Code? Sonst wird's schwer, da etwas zu sagen.


> P.S. Ich frage mich warum das nicht standardmäßig ins JDK integriert ist.


Weil man diese API Standard mäßig nicht braucht. Mit der API ist so wie so nicht all zu viel zu machen. Es wird derzeit kein Firewire und kein USB untertützt und Hardware nahe Programmierung ist auch nicht drin.


----------



## eve (23. Mai 2004)

Übrigens kommt die properties DAtei auch in den Ordner \jre\lib\ext. Das war gerade der Fehler, das die Klasse nichtgefunden wurde. 


Und siehe da da funzt es auch. Naja fast nur wenn ich es per ExecuteFile in Jedit starte, wenn ich über die Kommandozeile mit Java ** starte geht es nicht. Komisch.


----------



## L-ectron-X (23. Mai 2004)

Die Datei *javax.comm.properties* gehört aber ins *\jre\lib*-Verzeichnis. Der CLASSPATH darf dabei nicht verändert werden, wenn Du den modifiziert hast, wirds nicht funktionieren.


----------



## eversor (23. Mai 2004)

Hm ich werde das ganze morgen nochmal durchgehen. Danke erstmal soweit für die Hilfe. Ich geh jetzt erst mal ne Runde pennen. Wenn ich morgen von der Arbeit zurück bin kann ich hier dran weiterarbeiten (gegen 18:00 bis 19:00)


----------



## eve (25. Mai 2004)

Hab es aufgegeben. Werde die ganze Sache in C realisieren... Naja ein Versuch war es wert.


----------



## L-ectron-X (25. Mai 2004)

C/C++ ist in diesem Fall wirklich die bessere Wahl.


----------



## Guest (27. Mai 2004)

redet ihr hier vom J2SDK1.5.0 (beta) ?? oder von welcher Version?


----------



## L-ectron-X (29. Mai 2004)

Nein, von einem extra API. Dieses gehört nicht zu den Standard-Klassen und Paketen des SDK, sondern muss gesondert heruntergeladen und installiert werden.


----------



## Freakazoid (29. Mai 2004)

hmmm,also bei mir gings bis auch ein paar ähnliche probleme am anfang...
wenn du es doch noch mit java machen willst,dann kann ich gerne nochmal schauen ob ich irgendwas anders gemacht habe...wär dann aber erst morgen....


----------



## centiro (27. Jul 2004)

Hallo,

Kann ich mein java-Prog auch auf einem anderen Rechner, auf dem kein Java Ccmm API installiert ist, ausführen ?

Kann ich einfach comm package und die zugehörigen Dateien in meinem Package einbinden, und ausführen ? Also ohne die wichtigsten Comm-Dateien ins Java Verzeichnisse zu kopieren?

gruss


----------



## L-ectron-X (27. Jul 2004)

Da bin ich mir nicht ganz sicher, da zum javax.comm-Package neben der .jar-Datei mit den Klassen auch eine .dll-Datei für Windows und eine Properies-Datei gehören, die in ganz spezielle Verzeichnisse des JDK/JRE kopiert werden müssen.
Ich konnte auch keine Informationen dahin gehend finden, so bleibt Dir nur, es auszuprobieren.

Sun hat auch keine Implementierung für Linux vorgesehen, verweist aber auf eine Webseite eines Entwicklers, der dies getan hat: http://www.interstice.com/kevinh/linuxcomm.html


----------



## centrino (27. Jul 2004)

Hallo,

Mit  dieser Comm API kann man AT Command schicken und inputstreams bekommen. z.B.


            outputStream.write(65); //A
            outputStream.write(84); //T
            outputStream.write(64); //T
            outputStream.write(68); //D
            outputStream.write(84); //T
outputStream.write(32); //space
            outputStream.write(50); //2
            outputStream.write(49); //1
            outputStream.write(53); //5
            outputStream.write(54); //6
            outputStream.write(53); //5
            outputStream.write(13); //<cr>
            outputStream.flush();


Meine Frage ist, wie kann ich nun in Java eine Reihe von AT Commands voher in String oder in Dtei speichern und mit einem "Schlag" mit  outputStream zu COMx Port abschicken ?

Gruss


----------



## L-ectron-X (27. Jul 2004)

Keine Ahnung, habe ich noch nie gemacht.
Aber Du übergibst ja ausschließlich chars, könntest das also auch so machen:

```
outputStream.write('A');
```
Brauchst also nicht über den ASCII-Code des Zeichens gehen.
Dann könnte man vielleicht auch ein char-Array den OutputStream übergeben, oder es zumindest in einer for-Schleife auslesen. Im Prinzip basieren Strings ja auch nur auf char-Arrays, warum sollte es also nicht möglich sein, auch einen String mit dem Kommando zu übergeben.
<ungetestet>

```
String command = "AT DT 012345\n"; // \n = Zeilenende-Zeichen
outputStream.write(command);
```
</ungetestet>


----------

