ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
397
397
EMPFEHLEN
-
03.10.09 22:14 #1
- Registriert seit
- Oct 2009
- Beiträge
- 5
Hallo
ich lese laufend aus der Serial-Schnittstelle Werte ein. Das Programm startet beim Button drücken. Nun läuft und läuft und läuft ..
das Programm.
Leider geht mit dem ENDE Button das Programm nicht zu Ende.
Komme ich mit einem Thread weiter?
Muss beim Drücken des Ende Button noch einiges tun.
Bin relativ neu und brauche ein wenig hilfe.
-
03.10.09 22:30 #2
Hi und herzlich Willkommen bei tutorials.de,
meine erste Vermutung: Mit ENDE-Buton meinst du das Kreuzchen in der rechten, oberen Fensterecke. Damit dieser aktiviert wird, musst du folgendes machen:
Wenn ich mit der Vermutung nicht richtig gelgen habe, dann solltest du mal deinen Code posten.Code java:1
deinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Ciao
DosCoderMan kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.
Sollte ich mal Mist labern weist mich bitte darauf hin.
Ich freue mich über ein Danke, wenn ich helfen konnte!
-
Hey,
könnte mir vorstellen, dass du in einer gewollten Dauerschleife bist und daher das Programm sich nicht beenden lässt. Würde das Laden wie du schon gesagt hast in nem Thread machen... z.B. so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
SwingWorker<Boolean, String> daten_von_schnittstelle_laden = new SwingWorker<Boolean, String>() { @Override protected Boolean doInBackground() throws Exception { // hier dein code zum laden rein return true; } }; // und dann beim Programmaufruf noch ein: daten_von_schnittstelle_laden.execute();
vielleicht hilft dir das schon weil die exit on close sollte standardmäßig drin sein.
Gruß
-
04.10.09 18:26 #4
- Registriert seit
- Oct 2009
- Beiträge
- 5
Danke für die Hilfe. Leider kann ich so richtig nichts mit anfangen habe meinen code hier mal abgelegt und deine eingesetzt, so wie es verstanden haBE:
public frame001()
{
super();
daten_von_schnittstelle_laden()
{
@Override
protected Boolean doInBackground() throws Exception
{
try {
BufferedWriter da1 = new BufferedWriter(new FileWriter(dateiaus));
while( true ){
if (m_SerialPort != null){
inputString = m_SerialPort.readString(); //von Schnitstelle lesen
if( inputString.length() > 3 ){
text2.append(inputString);
System.out.println("Wert : " + inputString);
da1.write(inputString + "\r\n"); // In Datei schreiben
}
}
try{
Thread.sleep(100);
}
catch (InterruptedException e){
//da1.close();
}
}
// hier dein code zum laden rein
}
catch (IOException ioe ){
System.out.println("Error -- ");
}
return true;
}
};
-
04.10.09 19:50 #5
Hi,
so richtig schlau wird man aus deinem Code aber auch nicht. Wie zum Beispiel kann auf die allerletze Klammer in einer Klasse ein Semikolon folgen? Hab den Code mal eben in Netbeans eingefügt, formatieren lassen und bekomme nun zahlreiche Fehler, beispielsweise fehlt die Signatur von "datenVonSchnittstelleLaden()". Dann wird innerhalb einer geschweiften Klammer eine nicht vorhandene Methode überschrieben (ich nehme mal an, dass dein "frame0012 von JFrame erbt.).
Und dann kommen noch Formfehler im Code dazu:- was soll "frame001" bedeuten? Normalerweise schreibt man Klassennamen auch groß.
- wenn man "Boolean" verwendet, schreibt man ihn normalerweise klein. Die Wrapperklasse "Boolean" braucht man nur äußerst selten.[li]
Außerdem kommt mir "while(true)" äusserst suspekt vor. Also überarbeite deinen Code doch noch mal, sodass er sich wenigstens kompilieren lässt. Dazu könntest du auch noch mal den Code vom "Ende-Button" einfügen. Dann aber in [ JAVA]-Tags.
Ciao
DosCoderMan kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.
Sollte ich mal Mist labern weist mich bitte darauf hin.
Ich freue mich über ein Danke, wenn ich helfen konnte!
-
04.10.09 20:22 #6
- Registriert seit
- Oct 2009
- Beiträge
- 5
Hallo und Entschuldigung,
hier nun mal der ganze Code. Mit den Schreibconventionen habe ich es nicht so.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
/**
* Fenster der Anwendung
*/
public class frame001 extends JFrame
{
JMenuBar menu = new JMenuBar();
JMenu menuDatei = new JMenu();
JMenuItem menuDateiImport = new JMenuItem();
JMenuItem menuDateiBeenden = new JMenuItem();
SimpleSerial m_SerialPort = null;
String inputString = new String();
TextArea m_TextInput = new TextArea();
String dateiaus = new String("comport.txt");
String[] ausgabearray = new String[200];
int m_PortIndex;
TextArea text2 = new TextArea();
frame001Panel leinwand = new frame001Panel(this);
public frame001()
{
super();
daten_von_schnittstelle_laden()
{
@Override
protected Boolean doInBackground() throws Exception
{
try {
BufferedWriter da1 = new BufferedWriter(new FileWriter(dateiaus));
while( true ){
if (m_SerialPort != null){
inputString = m_SerialPort.readString(); //von Schnitstelle lesen
if( inputString.length() > 3 ){
text2.append(inputString);
System.out.println("Wert : " + inputString);
da1.write(inputString + "\r\n"); // In Datei schreiben
}
}
try{
Thread.sleep(100);
}
catch (InterruptedException e){
//da1.close();
}
}
// hier dein code zum laden rein
}
catch (IOException ioe ){
System.out.println("Error -- ");
}
return true;
}
};
try {
fensterEinrichten();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Initialisierung der Komponenten
private void fensterEinrichten() throws Exception
{
// Anwendungssymbol einrichten
leinwand.setSize(600, 400);
getContentPane().add(leinwand);
this.setSize(new Dimension(600,400));
this.setTitle("XXXX");
this.setResizable(false);
// Menü
menuDatei.setText("Port");
//menuDateiBeenden.setText("Beenden");
menuDateiBeenden.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
menuDateiBeenden_actionPerformed(e);
}
});
menuDatei.add(menuDateiImport);
menuDatei.add(menuDateiBeenden);
menu.add(menuDatei);
this.setJMenuBar(menu);
}
// Ereignisbehandlung für Menübefehle
public void menuDateiBeenden_actionPerformed(ActionEvent e)
{
System.exit(0);
}
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING)
{
System.out.println("processWindowEvent");
menuDateiBeenden_actionPerformed(null);
}
}
}
class frame001Panel extends JPanel
{
Image hintergrundbild;
frame001 hf;
JButton btn1 = new JButton();
JButton btn2 = new JButton();
TextArea text2 = new TextArea();
SimpleSerial m_SerialPort = null;
SwingWorker daten_von_schnittstelle_laden = new SwingWorker();
frame001Panel(frame001 fenster)
{
this.setLayout(null);
text2.setBounds(new Rectangle(20, 20, 550, 250));
btn1.setText("Start");
btn1.setForeground(Color.BLACK);
btn1.setBounds(new Rectangle(225,300, 125, 25));
btn1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// Init the serial port and associated Input/Output streams
//public void initSerialPort() throws IOException
//{
// If serial port was previously opened, close it now
// Most applications open serial port, and never need to close it again.
if (m_SerialPort != null)
{
m_SerialPort.close();
m_SerialPort = null;
}
// New instance of the serial port.
m_SerialPort = new SimpleSerialJava(1);
// If there's an error, throw an exception
//if (!m_SerialPort.isValid())
//{
// throw (new IOException("Serial port not opened"));
//}
button_start(e); //btn1_actionPerformed(e);
}
});
btn2.setText("Ende");
btn2.setForeground(Color.BLACK);
btn2.setBounds(new Rectangle(400, 300, 80, 25));
btn2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
btn2_actionPerformed(e);
}
});
add(btn1, null);
add(btn2, null);
add(text2,null);
}
public void button_start(ActionEvent eee)
{ // Ende Montstl zu Unt
System.out.println("Start");
daten_von_schnittstelle_laden.execute();
}
public void btn2_actionPerformed(ActionEvent e)
{
System.exit(0);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(hintergrundbild, 0, 0, getWidth(), getHeight(), this);
}
}
Ich hoffe das ist besser lesbar Ohne deine Code, der im Button implentiert ist, läuft das Programm ohne Ende, da auf der serielen Schnittstelle immer was ankommt. Dieses soll dan in eine Datei geschrieben werden. Jedoch ohne ein xx.close() geht es nicht. Und die seriel immer sendet finde ich so keine Ende.
mfg GG
-
Hey,
naja du musst meinen Code ja auch vollständig einfügen....
Du hast den Swingworker gar nicht eingebaut sondern das ganze nur als Funktion... Also baus als Swingworker ein und dann noch "execute" Funktion rein.... fertig
-
05.10.09 19:41 #8
- Registriert seit
- Oct 2009
- Beiträge
- 5
Hallo,
erst einmal danke für den code. leider geht die sw immer noch nicht.
finde nicht die richtige stelle für deinen code.
wie schon geschrieben, bin noch anfänger und brauche wohl doch noch eine ganze menge input.
mfg gg
-
Der swingworker ist letztendlich wie eine Variable zu schreiben. Also ganz normal wie sonst auch in die Klasse. Und dann beim Aufruf des Panels oder Frames (wie auch immer) musst du den mittels execute ausführen.
Ähnliche Themen
-
Gui Komponent an Thread(andere Klasse) übergeben
Von HuRaHoRRe im Forum JavaAntworten: 4Letzter Beitrag: 02.10.07, 14:35 -
VB oder C oder andere Programmierer für kleines Tool gesucht
Von dwex im Forum Stellenangebote (unentgeltlich)Antworten: 2Letzter Beitrag: 25.04.07, 11:16 -
Wer hat ne andere Idee?
Von julchen im Forum Creative LoungeAntworten: 3Letzter Beitrag: 15.09.06, 10:10 -
Andere Methoden aus einem Thread starten
Von Andron im Forum JavaAntworten: 10Letzter Beitrag: 05.06.06, 11:37 -
onSubmit - andere Idee?
Von wal im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 11.02.05, 09:10





Zitieren
Login





