WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 06.10.2003, 20:08   #1
jopp
Veteran
 
Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266


Standard java: gui & threads & parameterübergabe

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
jopp ist offline   Mit Zitat antworten
Alt 06.10.2003, 23:30   #2
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard Re: java: gui & threads & parameterübergabe

Zitat:
Original geschrieben von jopp
1. wenn ich einen SerialPort öffne, z.B.:

CommPortIdentifier cpi;
SerialPort com1 = (SerialPort)cpi.open("COM1", 1000);

wofür steht das 1000?
Nachzulesen im Communications API :
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
Flink ist offline   Mit Zitat antworten
Alt 06.10.2003, 23:43   #3
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard Re: java: gui & threads & parameterübergabe

Zitat:
Original geschrieben von jopp
wie kann ich die empfangen daten dann im gui im der textarea ausgeben?
javax.comm.SerialPort:

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
Flink ist offline   Mit Zitat antworten
Alt 07.10.2003, 00:06   #4
jopp
Veteran
 
Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266


Standard

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
jopp ist offline   Mit Zitat antworten
Alt 07.10.2003, 08:07   #5
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard

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
Flink ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:36 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag