In JFrame weitere Klassen aufrufen

Krikus

Mitglied
Hallo

ich habe folgendes Problem:

Unten steht der Code des TestJFrame. Aus dieser GUI soll die Klasse "TwoWaySerialComm" initalisiert werden. Diese Klasse erzeugt einen SerialPortEventListener damit ich gleichzeitg auf der Seriellen Schnittstelle schreiben und Lesen kann ohne Polling. (Code des bisherigen Aufrufes steht weiter unten)

Mein Problem ist es, das ich nicht weiß wo ich den Aufruf in Swing tätigen muss, damit es läuft. Testweise habe ich den Code einfach in die main() des TestJFrame geschrieben. Allerdings wird dieser anscheinend garnicht erst ausgeführt.

In Zukunft soll aus "TwoWaySerialComm" die Farbe des Button geändert werden.

Code des JFrame:

Java:
public class TestJFrame extends JFrame 
{
    JButton testJButton = new JButton("Schaltfläche");
    public TestJFrame() 
    {
        initComponents();      
    }
 
    private void initComponents()
    {
        setTitle("Testfenster");  // Fenstertitel setzen
        testJButton.addActionListener(new TestActionListener()); // EventListener für Schaltfläche hinzufügen
        add(testJButton);                                        // Schaltfläche zum Fenster hinzufügen         
        pack();
        setSize(200,200);                            // Fenstergröße einstellen
                                                     // (notwendig, damit das Fenster geschlossen werden kann)
        setVisible(true);                            // Fenster (inkl. Inhalt) sichtbar machen
    }
 
    class TestActionListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e) 
        {
            System.out.println("Schaltfläche wurde gedrückt");
        }           
    }
 
        /**
         * @param args
         * @throws IOException 
         * @throws SAXException 
         * @throws ParserConfigurationException 
         */
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestJFrame();
                
            }
        }); // Erzeugt einen neuen Thread, der eine Instanz von TestJFrame erzeugt

    }
}

Aufruf TwoWaySerialComm
Java:
Console user = new Console();
		 XVerwaltung xverwaltung = new XVerwaltung();
 
		 try
	        {
			 	TwoWaySerialComm rs232 = new TwoWaySerialComm(tagverwaltung);
			
			 	rs232.connect("COM1");
	        }
	        catch ( Exception e )
	        {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }

Gruß

Krikus
 
Hast du schon überprüft ob der Code in main(String[] args) wirklich nicht aufgerufen wird mit dem Debugger, oder indem du Ausgaben mit System.out.println gemacht hast?


PS: Aus persönlichen Interesse, in welcher Bibliothek befindet sich die Implementation zur Kommunikation mit der rs232-Schnittstelle?
 
HAllo,

ich benutze rxtx für den Seriellen Zugriff.

Habe die main einmal so abgeändert:

Java:
 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            	System.out.print(" TEst_1\n");
                new TestJFrame();
                System.out.print(" TEst_1\n");
            }
        }); // Erzeugt einen neuen Thread, der eine Instanz von TestJFrame erzeugt
        
        XVerwaltung xverwaltung = new XVerwaltung();
        System.out.print(" TEst_2\n");
		 try
	        {
			 	TwoWaySerialComm rs232 = new TwoWaySerialComm(tagverwaltung);
			
			 	rs232.connect("COM1");
	        }
	        catch ( Exception e )
	        {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }
       
        
    }

Leider bekomme ich von den Testausgaben auf der Konsole keinen einzigen zu sehen. Nur die Ausgabe wenn der Button gedrückt wird erscheint.

Woran liegt das?
 
Ich habe das mal ausprobiert, bei mir funktioniert alles genau so wie es soll, erhalte folgende Ausgabe:
TEst_2
TEst_1
TEst_1
Schaltfläche wurde gedrückt

(Das letzte natürlich nur wenn ich den Button drücke), das einzige was ich geändert habe ist, dass ich die Zeilen 10, 14 und 16 auskommentiert habe, weil mir die Klassen fehlen und es sich sonst nicht kompelieren ließe
 
Du solltest dir Gedanken machen, ob du den Zugriff auf die Hardware nicht von einem separaten Thread aus durchführst. Das hat den Vorteil, dass deine GUI vollständig nutzbar bleibt, während dein Programm mit dem RS232-Gerät munter kommunizieren kann.
 

Neue Beiträge

Zurück