[Java] Nieuw frame blijft "herbouwen"

Pagina: 1
Acties:

  • dumpie
  • Registratie: Februari 2003
  • Niet online
Goedemorgen allemaal,

Ik ben met een schoolopdracht bezig om een simpele sql connectie te leggen en vervolgens na het inloggen in een frame querys te kunnen uitvoeren en opvangen.
Ik begon er met goede moed aan maar dit is ondertussen een eindje veranderd naar depressieve toestand :+.

Het probleem:
Ik heb een package genaamd sqlFront met daarin Main.java en vervolgens een subfolder ui met al de frames (userLogin, executeQuery, etc).
In package sqlFront.ui heb ik een class userLogin die het login frame moet tonen en is de vervinding succesvol dan word de boolean CONNECTED true.

De code voor Main.java:
code:
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
package sqlfront;

import sqlfront.ui.*;
/**
 *
 * @author Administrator
 */
public class Main {
    private boolean CONNECTED = false;
    
    /** Creates a new instance of Main */
    public Main() {
        if(!CONNECTED){
            new userLogin();   
        }        
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main main = new Main();
    }
    
}


Zoals je ziet maak ik een nieuw object aan van userLogin en de code in userLogin is het volgende:
code:
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package sqlfront.ui;

import javax.swing.*;
/**
 *
 * @author  Administrator
 */
public class userLogin extends javax.swing.JFrame {
    
    /**
     * Creates new form userLogin 
     */
    public userLogin() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        }
        catch(UnsupportedLookAndFeelException exc){
            exc.printStackTrace();
        }
        catch(ClassNotFoundException exc1){
            exc1.printStackTrace();
        }
        catch(InstantiationException exc2){
            exc2.printStackTrace();
        }
        catch(IllegalAccessException exc3){
            exc3.printStackTrace();
        }
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new userLogin().setVisible(true);
            }
        });
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jPasswordField1 = new javax.swing.JPasswordField();
        jComboBox1 = new javax.swing.JComboBox();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("sqlFront - Login");
        setAlwaysOnTop(true);
        setBackground(new java.awt.Color(204, 204, 0));
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setForeground(new java.awt.Color(204, 204, 0));
        setMaximizedBounds(new java.awt.Rectangle(200, 200, 100, 100));
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jLabel1.setText("Host");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(10, 10, 70, 14);

        jLabel2.setText("Username");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(10, 30, 70, 14);

        jLabel3.setText("Password");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(10, 50, 70, 14);

        jLabel4.setText("Database");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(10, 70, 70, 14);

        jButton1.setText("Refresh");
        jButton1.setName("btnRefresh");
        getContentPane().add(jButton1);
        jButton1.setBounds(180, 70, 100, 23);

        jButton2.setText("Connect");
        jButton2.setEnabled(false);
        jButton2.setName("btnConnect");
        getContentPane().add(jButton2);
        jButton2.setBounds(80, 90, 100, 23);

        jTextField1.setName("inpHost");
        getContentPane().add(jTextField1);
        jTextField1.setBounds(80, 10, 100, 19);

        jTextField2.setName("inpUsername");
        getContentPane().add(jTextField2);
        jTextField2.setBounds(80, 30, 100, 19);

        jPasswordField1.setName("inpPassword");
        getContentPane().add(jPasswordField1);
        jPasswordField1.setBounds(80, 50, 100, 20);

        jComboBox1.setName("selDB");
        getContentPane().add(jComboBox1);
        jComboBox1.setBounds(80, 70, 100, 22);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-400)/2, (screenSize.height-300)/2, 400, 300);
    }
    // </editor-fold>
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {                          
        System.exit(0);
    }                         
       
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPasswordField jPasswordField1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration
    
}


Als ik Main.java compile werkt het goed zonder fouten, hij laat ook netjes het userLogin frame zien, maar dan komt het probleem.
Hij blijft deze maar steeds overnieuw "bouwen".
Net alsof ik een oneindige loop heb waarin ik aangeef dat hij steeds een nieuwe object moet maken van userLogin.
Ik heb al geprobeerd om frmUserLogin.wait(0) mee te geven, maar dit is ook niet een oplossing.
Ik vroeg me eigenlijk ook af of ik verplicht ben om een object aan te maken van userLogin en of ik deze niet gewoon kan aanroepen om te showen?

Misschien is de uitleg hierboven te sumier of is het juist heel simpel dat ik er overheen kijk }:O, laat het dan even weten.

Alvast bedankt!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Wat gebeurt er als je deze twee regels omdraait:
Java:
1
2
3
4
5
6
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
                new userLogin().setVisible(true);
            }
        });
        initComponents();
wordt
Java:
1
2
3
4
5
6
initComponents();
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new userLogin().setVisible(true);
            }
        });

En misschien kun je in initComponents aan het einde nog een pack() toevoegen.

[ Voor 9% gewijzigd door zwippie op 07-02-2006 14:40 ]

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • dumpie
  • Registratie: Februari 2003
  • Niet online
Hoi zwippie, dank je voor je reactie.
Ik heb het geprobeerd maar hij blijft nog steeds oneindig veel van die frames bouwen.
Ook als ik pack gebruik centered en resized die het frame niet meer goed.

code:
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * userLogin.java
 *
 * Created on February 7, 2006, 12:41 PM
 */

package sqlfront.ui;

import javax.swing.*;
/**
 *
 * @author  Administrator
 */
public class userLogin extends javax.swing.JFrame {
    
    /**
     * Creates new form userLogin 
     */
    public userLogin() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        }
        catch(UnsupportedLookAndFeelException exc){
            exc.printStackTrace();
        }
        catch(ClassNotFoundException exc1){
            exc1.printStackTrace();
        }
        catch(InstantiationException exc2){
            exc2.printStackTrace();
        }
        catch(IllegalAccessException exc3){
            exc3.printStackTrace();
        }
        initComponents(); 
        java.awt.EventQueue.invokeLater(new Runnable() { 
            public void run() { 
                new userLogin().setVisible(true); 
            } 
        });
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jPasswordField1 = new javax.swing.JPasswordField();
        jComboBox1 = new javax.swing.JComboBox();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("sqlFront - Login");
        setBackground(new java.awt.Color(204, 204, 0));
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setForeground(new java.awt.Color(204, 204, 0));
        setMaximizedBounds(new java.awt.Rectangle(200, 200, 100, 100));
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jLabel1.setText("Host");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(10, 10, 70, 14);

        jLabel2.setText("Username");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(10, 30, 70, 14);

        jLabel3.setText("Password");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(10, 50, 70, 14);

        jLabel4.setText("Database");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(10, 70, 70, 14);

        jButton1.setText("Refresh");
        jButton1.setName("btnRefresh");
        getContentPane().add(jButton1);
        jButton1.setBounds(180, 70, 100, 23);

        jButton2.setText("Connect");
        jButton2.setEnabled(false);
        jButton2.setName("btnConnect");
        getContentPane().add(jButton2);
        jButton2.setBounds(80, 90, 100, 23);

        jTextField1.setName("inpHost");
        getContentPane().add(jTextField1);
        jTextField1.setBounds(80, 10, 100, 19);

        jTextField2.setName("inpUsername");
        getContentPane().add(jTextField2);
        jTextField2.setBounds(80, 30, 100, 19);

        jPasswordField1.setName("inpPassword");
        getContentPane().add(jPasswordField1);
        jPasswordField1.setBounds(80, 50, 100, 20);

        jComboBox1.setName("selDB");
        getContentPane().add(jComboBox1);
        jComboBox1.setBounds(80, 70, 100, 22);

        pack();
    }
    // </editor-fold>
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {                          
        System.exit(0);
    }                         
       
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPasswordField jPasswordField1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration    
}

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Ok, je doet in je Main:
Java:
1
2
3
4
5
public Main() {
        if(!CONNECTED){
            new userLogin();   
        }        
    }

en later doe je
Java:
1
2
3
4
5
java.awt.EventQueue.invokeLater(new Runnable() { 
            public void run() { 
                new userLogin().setVisible(true); 
            } 
        });

Je maakt dus steeds weer een nieuwe instantie van UserLogin in je run() methode, verander dit.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • dumpie
  • Registratie: Februari 2003
  • Niet online
Juist! Hartelijk bedankt zwippie _/-\o_
Het lag dus toch aan iets kleins:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public userLogin() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch(UnsupportedLookAndFeelException exc){
            exc.printStackTrace();
        } catch(ClassNotFoundException exc1){
            exc1.printStackTrace();
        } catch(InstantiationException exc2){
            exc2.printStackTrace();
        } catch(IllegalAccessException exc3){
            exc3.printStackTrace();
        }
        initComponents();
        this.setVisible(true);
    }