tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
324
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    Hallo liebes Forum,

    ich habe ein (weiteres) Problem:
    Ich habe einen JButton angelegt welcher ein quasi ein Unterprogramm aufruft.
    Als ich das Unterprogramm quasi für sich geschrieben habe lief noch alles normal.
    Nun habe ich es in das Hauptprogramm ganz normal eingebunden (Button aufs JPanel gelegt). Wenn ich nun das Programm ausführe muss ich den Button 2x klicken bis er reagiert. Dann geht alles ganz normal, wenn man nun die Funktion des Programmes abruft (also er soll quasi eine Verbindung zur Datenbank herstellen, inhalte auslesen) vollführt er die Aktion gleich 2x!
    Danke im Vorraus!

    Hier mal der Code:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    
    public  void verbindungdb() {
            
            
            //--------------------
            
            login.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            login.setSize(300,200);
            login.setLayout(new BorderLayout());
            login.setLocationRelativeTo(verbindung);
            
            //--------------------
            textarea.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            textarea.setSize(500,700);
            textarea.setLocationRelativeTo(center);
            textarea.add(textfeld);
            
            
            //--------------------
            buttonablage.add(los);
            login.add(buttonablage, BorderLayout.PAGE_END);
            center.setLayout(new GridLayout(0,2));
            center.add(dbl);
            center.add(dbtf);
            center.add(userl);
            center.add(usertf);
            center.add(pwl);
            center.add(pwtf);
            login.add(center, BorderLayout.CENTER);
            
            //--------------------
            
            verbindung.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) { 
                login.setVisible(true);
               }
            });
        
            //--------------------
            
            los.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg1) { 
                    String dbname, username, passwort;
                      dbname = dbtf.getText();
                      username = usertf.getText();
                      passwort = pwtf.getText();
                      login.dispose();
                      
                      //Ignorieren:
                      //textarea.setVisible(true);
                     // ausgabe.append("Datenbankname: " + dbname + "\nUsername: " + username + "\nPasswort verborgen! \n \n -------------------- \n Verbindung wird aufgebaut!\n");
                     
                     String DBURL = "jdbc:odbc:";
                     String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
                 try {
                        Class.forName(Driver);
                        ausgabe.append(" Treiber wurde geladen!\n");
                        //System.out.println("Treiber wurde geladen!");
                    
                    } catch (ClassNotFoundException e) {
                        ausgabe.append("Treiber wurde nicht geladen!");
                        e.printStackTrace();
                        System.exit(0);
                    }
                    //Jetzt wird die Verbindung aufgebaut
                    Connection con = null;
                    
                try {
                        con = DriverManager.getConnection(DBURL.concat(dbname), username, passwort);
                        ausgabe.append(" Verbindung erfolgreich!\n\nTabellen-Inhalt:\n");
                        //System.out.println("Verbindung erfolgreich! \n\nTabellen-Inhalt:\n");
                    } catch (SQLException e) {
                        System.out.println("Verbindung fehlgeschlagen!");
                        e.printStackTrace();
                    }
                try
                     {
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("select * from IP");
             
                while(rs.next())
                {              
                
                ausgabe.append(rs.getString("ID"));
                ausgabe.append("  ");
                ausgabe.append(rs.getString("Netzanfang"));
                ausgabe.append(" - ");
                ausgabe.append(rs.getString("Netzende"));
                ausgabe.append("\n");
                }
                                      
                rs.close();
               
               stmt.close();
               
               }
                             
                     catch(Exception exce) {
                    System.out.println(exce.toString());
                     }
                     
                }
                ;});}
    Geändert von Alex Großmann (28.06.11 um 14:37 Uhr)
     

  2. #2
    SE Tutorials.de Gastzugang
    Bitte nutze [java][/java] - Tags für Java-Source anstatt die normalen [code][/code] - Tags da durch das Syntaxhighlightning die Lesbarkeit erhöt wird.

    Zu deinem Code:
    1) I/O-Operationen NIEMALS im EDT ablaufen lassen. Leite hierzu eine Klasse von Thread ab und lasse es in einem separaten Thread laufen ... das verhindert das die GUI freezed und du die Kontrolle verlierst.
    2) du brauchst den ODBC-Driver nicht zu laden. Seit Java1.4.2 läd der DriverManager automatisch alle zum Startzeitpunkt verfügbaren Driver ... also auch den ODBC-Driver. Selbst wenn du jetzt einen anderen Treiber nutzen willst wird dieser automatisch geladen solange er zum Start im CLASSPATH bekannt ist.
    3) Du hast in Zeile 98 nur ein Exception.toString() ... versuche hier mal Exception.printStackTrace() um mehr Informationen zu bekommen.

    Deine Fehlerbeschreibung ist in soweit sehr präziese ... allerdings fehlt uns ein compilebares Beispiel oder eine Erklärung wie wir diesen Fehler reproduzieren können um dir weiter zu helfen.
    Auch habe ich im groben Überfliegen deines Source gemerkt das da vielleicht sogar ein Design-Fehler dran schuld sein könnte das du versuchst etwas umzusetzen was so aber nicht geht.
     

  3. #3
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    Hiho Spike,

    erneut vielen Dank
    Danke für den Hinweis mit dem Java code! Das hab ich ganz vergessen (obwohl ich es mal gelesen habe-.-)...

    Was bedeutet EDT? MultiThreading kann ich noch gar nicht, wäre aber mal Klasse wenn ich das gleich mit ins Programm einbauen könnte, da muss ich mich mal dahinter setzen.
    Den Programmcode, als ganzes will ich euchum Himmelswillen nicht zumuten, da er weder Fertig noch aufgeräumt ist..
    Es sollte aber deffinitiv mit Java möglich sein. Hier mal was es kann:
    Es erlaubt einen Port anzulegen, dann ruft man über eine Datenbank (da oben das Unterprogramm) IP Bereiche ab. Diese werden dann durch ne Schleife gejagdt und hochgezählt und einzeln angepingt. ISt dann die IP Adresse mit dem Port verfügbar soll es ausgegeben werden. So in etwa

    die Exception sagt leider gar nichts oO

    ps: habe meine Posts abgeändert, steht nun in Java, sieht echt viel besser aus
    Geändert von Alex Großmann (28.06.11 um 14:38 Uhr)
     

  4. #4
    SE Tutorials.de Gastzugang
    Nun .. als Anhaltpunkt würde mir noch einfallen das er beim ersten Klick schon arbeitet ... du davon aber nichts mitbekommst weil es scheinbar eine Weile dauert ... und aus Ungeduldigkeit haust du dann gleich ein zweites Mal auf den Button ...
    Versuche doch einfach mal zu warten ob nach einer gewissen Zeit etwas passiert. Das ist nämlich eins der Probleme wenn man alles im EDT ablaufen lässt : die gesamte GUI freezed *wenn auch meist nicht erkennbar* und irgendwo hakt es dann und es endet in einem DEADLOCK. Hier würde ich sehr viel Debugg-Zeilen in den Code adden um zu sehen ob er beim ersten Klick schon was macht oder eben nicht und dann wirklich einfach mal warten.
     

  5. #5
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    Natürlich habe ich schon gewartet.... bin vielleicht nicht bewandert in Java (Programmiere das erst seit 2 Wochen!) aber nicht ganz von gestern

    Glaubst du, mal angenommen es friert ein, wobei ich 1min Warten schon extrem lang finde(...), das man das noch Lösen könnte? Also in Form von MultiThreadding
     

  6. #6
    SE Tutorials.de Gastzugang
    Die viel interessantere Frage : was passiert wenn du das ERSTE mal auf den Button klickst ?
    Nichts ? Irgendwas ? FREEZE ?
    Jetzt kommt es darauf an wirklich alles Schritt für Schritt zu verfolgen und zu analysieren.
     

  7. #7
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    Offensichtlich nichts :o
    Er kann sich eigentlich auch noch gar nicht einloggen (in die Datenbank) weil Ihm erst im nächsten Pop Up die Eingaben dafür gegeben werden.
    Er loggt sich dann quasi 2x ein...echt merkwürdig...vielleicht sollte ich das ganze Segment neu schreiben oO
     

  8. #8
    SE Tutorials.de Gastzugang
    Wäre schon sinnvoll wenn du erst den Button fürs einloggen anzeigst und danach erst die Felder für die Login-Informationen.
     

  9. #9
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    Ist doch so?
     

  10. #10
    SE Tutorials.de Gastzugang
    Ich meinte damit das es sinnvoll wäre wenn du diesen gesamten Abschnitt neu schreiben würdest da scheinbar irgendetwas von der Reihenfolge her nicht hinhaut.
     

  11. #11
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    Ahso
    Ja das mach ich jetzt mal, ich meld mich nacher dann nochmal!
     

  12. #12
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    119
    das Problem war gar net so schwer zu Lösen! Ich hab meinen Quellcode aufgeräumt und dabei ist mir aufgefallen das mein Verbinden Actionlistener einmal in der GUI Klasse sowie in der dbverbindungsklasse war! Ganz einfach, und ich habs einfach nicht bemerkt -.-... egal, danke nochmal Spike für deine Bemühungen! (mitm Gesamtcode hättest den Fehlder sicher schnell gehabt, aber da hab ich mich ja so verweigert, sorry =D)
     

  13. #13
    SE Tutorials.de Gastzugang
    Ach ... so etwas passiert ...
    Und ob ichs so schnell mit dem kompletten Source gefunden hätte weis ich nicht ... ich hätte auf jeden Fall debugg ohne Ende gemacht und dann wär es mir sicher aufgefallen das irgendwas doppelt läuft.
    Was mich jetzt an dem Problem wirklich interessiert : warum er erst beim zweiten Klick beide Aktionen auslöst und nicht schon beim ersten ?=! ... Wäre auf jeden Fall aber mal n gutes Rätzel fürs Coding Quiz =)
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 12.02.08, 19:26
  2. Photoshop verbuggt!?
    Von X4R im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 09.09.05, 15:00
  3. BITTE BITTE HILFE ''Laufzeitfehler 713'
    Von anyaa im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 26.04.04, 10:44
  4. Mein Acc is verbuggt :(
    Von cardex im Forum Smalltalk
    Antworten: 4
    Letzter Beitrag: 07.06.02, 17:42