![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266
|
![]() hi leute
habe folgendes problem ich bin gerade dabei ein kleines serial terminal zu programmieren. dazu habe ich einen frame mit zwei text areas programmiert. jetzt möchte ich über einen menü die serielle schnittstelle öffnen und die empfangenen daten in einem der text areas darstellen. mein problem ist nun, wenn ich das gui als eigene klasse definiere, die settings als dialog starten lasse und das einlesen der schnittstelle über einen thread laufen lasse, wie kann ich die settings zum portöffnen übergeben und die empfangen daten dann im gui im der textarea ausgeben? welche möglichkeiten stehen mir zur verfügung die parameter zu übergeben? also ich habe absolut keinen plan, wie ich das realisieren kann. und dann hätte ich noch zwei fragen, und zwar zur commapi: 1. wenn ich einen SerialPort öffne, z.B.: CommPortIdentifier cpi; SerialPort com1 = (SerialPort)cpi.open("COM1", 1000); wofür steht das 1000? 2. ich lese mittels InputStream die Daten vom SerialPort wie kann ich die daten interpretieren? ich habe ein objekt vom typ byte-array dazu verwendet und das programm mit verschieden langen byte-arrays ausgeführt. und dieses ergebnis dann ausgeben lassen (leider nicht im text area feld) und das ergebnis war immer anders. wenn ich jetzt von einem rechner über hyperterminal zeichen schicke sollten diese dann nicht reihenweise eingelesen werden und die grösse des bytearrays nur einfluss auf die aufeinmal ausgegebenen zeichen am monitor haben. (ich hoffe das ist halbwegs verständlich geschrieben) zur sicherheit nocheinmal: 123 über hyperterminal -> ausgabe über programm am monitor byte[1] == > 11111 123 über hyperterminal -> ausgabe über programm am monitro byte[3] == > 123 123 also, ich hoffe ich habe nicht alzu unverständlich geschrieben und ich hoffe außerdem, dass mir einer von euch helfen kann. besten dank im voraus jopp |
![]() |
![]() |
![]() |
#2 | |
Hero
![]() |
![]() Zitat:
open public CommPort open(java.lang.String appname, int timeout) throws PortInUseExceptionOpens Parameters: appname - Name of application making this call. This name will become the owner of the port. Useful when resolving ownership contention. timeout - time in milliseconds to block waiting for port open
____________________________________
Bibel |
|
![]() |
![]() |
![]() |
#3 | |
Hero
![]() |
![]() Zitat:
addEventListener(SerialPortEventListener lsnr) Registers a SerialPortEventListener object to listen for SerialEvents. Mache in deiner Graphik-Klasse eine Anmeldung für Events vom seriellen Port. In herkömmlichen Anwendungen gibt es Mouse-Listener und Keyboard-Listener, analog muss es auch über serielles-Port-Listener gehen.
____________________________________
Bibel |
|
![]() |
![]() |
![]() |
#4 |
Veteran
![]() Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266
|
![]() 1. danke für deine antworten, aber zu der ersten antwort habe ich eine frage, und zwar:
was genau ist gemeint, wenn da steht: time in milliseconds to block waiting for port open heißt das, dass erst nach 1000ms der port geöffnet wird, oder das nur alle 1000ms der port geöffnet wird? sorry die frage wird dir vielleicht blöd erscheinen aber leider habe eben null erfahrung damit. bezüglich der 2. antwort: das mit dem SerialPortListener habe ich schon verstanden. sollten daten am port anliegen wird dieser aktiviert. aber wie kann kann ich aus einem laufendem thread (serialRead) in eine grafische oberfläche schreiben? danke nochmals für deine antworten jopp |
![]() |
![]() |
![]() |
#5 |
Hero
![]() |
![]() 1. Timeout: Der Name besagt schon, was es ist: Wenn der Port gerade nicht verfügbar ist, weil ihn eine andere Anwendung (in Java oder etwas anderem) blockiert, dann wird ein Timer mit der Zeit Timeout gestartet. In Java wird ein PORT_OWNERSHIP_REQUESTED Event ausgelöst. Wenn nach einer Zeit von 'Timeout' Milisekunden der Port immer noch blockiert ist, tritt der Negativfall ein: eine PortInUseException wird geworfen.
2. Wenn du von deinem nichtgrafischen Thread (serialRead) direkt auf den Bildschirm schreiben willst, benötigst du schon im Konstruktor des Thread einen Übergabeparameter, der das grafische Ausgabeobjekt angibt. Dieses Textarea stammt von deiner Klasse, die die Ausgaben macht und wurde beim Erzeugen des SerialThread als Parameter übergeben. class SerialThread extends Thread { TextArea output; SerialThread(TextArea output) { this.output = output; } public void run() { // Ausgaben werden einfach auf das output-Objekt geschrieben . . . } }
____________________________________
Bibel |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|