tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
334
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Krikus Krikus ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    64
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    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
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    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
     

  2. #2
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    193
    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?
     

  3. #3
    Krikus Krikus ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    64
    HAllo,

    ich benutze rxtx für den Seriellen Zugriff.

    Habe die main einmal so abgeändert:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
     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?
     

  4. #4
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    193
    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
     

  5. #5
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    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.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 11.04.11, 10:48
  2. Antworten: 4
    Letzter Beitrag: 21.12.07, 10:53
  3. JFrame- Methoden aus Main aufrufen
    Von Andre_Java im Forum Java
    Antworten: 3
    Letzter Beitrag: 18.12.07, 14:08
  4. mit php c# klassen aufrufen
    Von FJK im Forum PHP
    Antworten: 5
    Letzter Beitrag: 25.11.07, 00:52
  5. Ein JFrame aus einem anderem JFrame aufrufen!
    Von Lautsprecher im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.11.05, 09:37