【问题标题】:Java Application Window is very slowJava 应用程序窗口很慢
【发布时间】:2015-01-19 20:47:53
【问题描述】:

您好,我已经创建了一个 Java 应用程序窗口,它应该连接到数据库并更改订单状态,并且还可以更详细地查看它们。但无缘无故,应用程序变得非常缓慢并且不执行 UPDATE 命令,代码在哪里:

/**
 * Create the application.
 */
public EstagioGUITeste() {
    initialize();
}

private Connection ligacao = null;
private JComboBox cbEstado;
private JTable table;

private void iniLigacao() {
    String url = "jdbc:mysql://localhost/science4estagio";
    String user = "root";
    String password = "";

    try {
        ligacao = DriverManager.getConnection(url, user, password);
    } catch (SQLException se) {
        se.getLocalizedMessage();
    }
}

private void closeLigacao() {
    try {
        if (ligacao != null) {
            ligacao.close();

        }
    } catch (SQLException se) {
        se.getLocalizedMessage();
    }
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 1012, 403);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new CardLayout(0, 0));
    JPanel panelLogin = new JPanel();
    frame.getContentPane().add(panelLogin, "panelLogin");
    GridBagLayout gbl_panelLogin = new GridBagLayout();
    gbl_panelLogin.columnWidths = new int[] { 225, 358, 225, 0 };
    gbl_panelLogin.rowHeights = new int[] { 39, 0, 0, 0, 0, 48, 0 };
    gbl_panelLogin.columnWeights = new double[] { 1.0, 0.0, 1.0,
            Double.MIN_VALUE };
    gbl_panelLogin.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0,
            0.0, Double.MIN_VALUE };
    panelLogin.setLayout(gbl_panelLogin);

    JLabel lblNewLabel = new JLabel("Login");
    lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 32));
    GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
    gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
    gbc_lblNewLabel.anchor = GridBagConstraints.NORTH;
    gbc_lblNewLabel.gridx = 1;
    gbc_lblNewLabel.gridy = 0;
    panelLogin.add(lblNewLabel, gbc_lblNewLabel);

    JLabel lblNewLabel_1 = new JLabel("User:");
    GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
    gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5);
    gbc_lblNewLabel_1.anchor = GridBagConstraints.EAST;
    gbc_lblNewLabel_1.gridx = 0;
    gbc_lblNewLabel_1.gridy = 2;
    panelLogin.add(lblNewLabel_1, gbc_lblNewLabel_1);

    txtUser = new JTextField();
    GridBagConstraints gbc_txtUser = new GridBagConstraints();
    gbc_txtUser.insets = new Insets(0, 0, 5, 5);
    gbc_txtUser.fill = GridBagConstraints.HORIZONTAL;
    gbc_txtUser.gridx = 1;
    gbc_txtUser.gridy = 2;
    panelLogin.add(txtUser, gbc_txtUser);
    txtUser.setColumns(10);

    JLabel lblPassowrd = new JLabel("Password:");
    GridBagConstraints gbc_lblPassowrd = new GridBagConstraints();
    gbc_lblPassowrd.anchor = GridBagConstraints.EAST;
    gbc_lblPassowrd.insets = new Insets(0, 0, 5, 5);
    gbc_lblPassowrd.gridx = 0;
    gbc_lblPassowrd.gridy = 3;
    panelLogin.add(lblPassowrd, gbc_lblPassowrd);

    passwordField = new JPasswordField();
    passwordField.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                iniLigacao();
                try {
                    String sql = "SELECT * FROM view_ecra2 ";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }

                closeLigacao();

                iniLigacao();
                try {
                    PreparedStatement inst = ligacao
                            .prepareStatement("SELECT * FROM utilizadorpassword WHERE User=? and Password=? ");
                    inst.setString(1, txtUser.getText());
                    inst.setString(2, passwordField.getText());
                    ResultSet resultado = inst.executeQuery();
                    int contador = 0;
                    while (resultado.next()) {
                        contador = contador + 1;

                    }
                    if (contador == 1) {
                        JOptionPane.showMessageDialog(null,
                                "Acesso Garantido\n");
                        CardLayout card = (CardLayout) frame
                                .getContentPane().getLayout();
                        card.show(frame.getContentPane(), "panelPrincipal");
                    } else if (contador > 1) {
                        JOptionPane.showMessageDialog(null,
                                "Utilizador e password duplicados");
                    } else {
                        JOptionPane.showMessageDialog(null,
                                "Utilizador e/ou password errados");
                    }
                    inst.close();
                } catch (SQLException e1) {
                    System.out
                            .println("Impossivel ligar à base de dados\n");
                    System.out.println(e1.getLocalizedMessage());
                }
                closeLigacao();
            }
        }
    });
    GridBagConstraints gbc_passwordField = new GridBagConstraints();
    gbc_passwordField.insets = new Insets(0, 0, 5, 5);
    gbc_passwordField.fill = GridBagConstraints.HORIZONTAL;
    gbc_passwordField.gridx = 1;
    gbc_passwordField.gridy = 3;
    panelLogin.add(passwordField, gbc_passwordField);

    JButton btnNewButton = new JButton("Entrar");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            iniLigacao();
            try {
                String sql = "SELECT * FROM view_ecra2;";
                PreparedStatement st = ligacao.prepareStatement(sql);
                ResultSet rs = st.executeQuery();
                table.setModel(DbUtils.resultSetToTableModel(rs));
            } catch (SQLException se) {
                se.getLocalizedMessage();
            }

            closeLigacao();

            iniLigacao();
            try {
                PreparedStatement inst = ligacao
                        .prepareStatement("SELECT * FROM utilizadorpassword WHERE User=? and Password=? ");
                inst.setString(1, txtUser.getText());
                inst.setString(2, passwordField.getText());
                ResultSet resultado = inst.executeQuery();
                int contador = 0;
                while (resultado.next()) {
                    contador = contador + 1;

                }
                if (contador == 1) {
                    JOptionPane.showMessageDialog(null,
                            "Acesso Garantido\n");
                    CardLayout card = (CardLayout) frame.getContentPane()
                            .getLayout();
                    card.show(frame.getContentPane(), "panelPrincipal");
                } else if (contador > 1) {
                    JOptionPane.showMessageDialog(null,
                            "Utilizador e password duplicados");
                } else {
                    JOptionPane.showMessageDialog(null,
                            "Utilizador e/ou password errados");
                }
                inst.close();
            } catch (SQLException e1) {
                System.out.println("Impossivel ligar à base de dados\n");
                System.out.println(e1.getLocalizedMessage());
            }
            closeLigacao();

        }
    });
    GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
    gbc_btnNewButton.insets = new Insets(0, 0, 0, 5);
    gbc_btnNewButton.gridx = 1;
    gbc_btnNewButton.gridy = 5;
    panelLogin.add(btnNewButton, gbc_btnNewButton);

    JPanel panelPrincipal = new JPanel();
    frame.getContentPane().add(panelPrincipal, "panelPrincipal");
    GridBagLayout gbl_panelPrincipal = new GridBagLayout();
    gbl_panelPrincipal.columnWidths = new int[] { 26, 44, 78, 169, 124, 69,
            24, 0 };
    gbl_panelPrincipal.rowHeights = new int[] { 66, 104, 41, 0 };
    gbl_panelPrincipal.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0,
            1.0, 0.0, 0.0, Double.MIN_VALUE };
    gbl_panelPrincipal.rowWeights = new double[] { 0.0, 1.0, 0.0,
            Double.MIN_VALUE };
    panelPrincipal.setLayout(gbl_panelPrincipal);

    JButton btnCarregarDados = new JButton("Recarregar dados");
    btnCarregarDados.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            iniLigacao();
            try {
                String sql = "SELECT * FROM view_ecra2;";
                PreparedStatement st = ligacao.prepareStatement(sql);
                ResultSet rs = st.executeQuery();
                table.setModel(DbUtils.resultSetToTableModel(rs));
            } catch (SQLException se) {
                se.getLocalizedMessage();
            }
            cbEstado.setSelectedIndex(0);
            closeLigacao();
    }});
    JLabel lblNewLabel_2 = new JLabel("");
    lblNewLabel_2.setIcon(new ImageIcon("C:\\workspace\\Science4youTestes\\LogoPanelPrincipal.png"));
    GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints();
    gbc_lblNewLabel_2.fill = GridBagConstraints.BOTH;
    gbc_lblNewLabel_2.gridwidth = 5;
    gbc_lblNewLabel_2.insets = new Insets(0, 0, 5, 5);
    gbc_lblNewLabel_2.gridx = 0;
    gbc_lblNewLabel_2.gridy = 0;
    panelPrincipal.add(lblNewLabel_2, gbc_lblNewLabel_2);
    GridBagConstraints gbc_btnCarregarDados = new GridBagConstraints();
    gbc_btnCarregarDados.insets = new Insets(0, 0, 5, 5);
    gbc_btnCarregarDados.fill = GridBagConstraints.BOTH;
    gbc_btnCarregarDados.gridx = 5;
    gbc_btnCarregarDados.gridy = 0;
    panelPrincipal.add(btnCarregarDados, gbc_btnCarregarDados);

    JScrollPane scrollPane = new JScrollPane();
    GridBagConstraints gbc_scrollPane = new GridBagConstraints();
    gbc_scrollPane.fill = GridBagConstraints.BOTH;
    gbc_scrollPane.gridwidth = 5;
    gbc_scrollPane.insets = new Insets(0, 0, 5, 5);
    gbc_scrollPane.gridx = 1;
    gbc_scrollPane.gridy = 1;
    panelPrincipal.add(scrollPane, gbc_scrollPane);

    table = new JTable();
    scrollPane.setViewportView(table);

    JLabel lblOrganizarPor = new JLabel("Mostrar Estado:");
    GridBagConstraints gbc_lblOrganizarPor = new GridBagConstraints();
    gbc_lblOrganizarPor.anchor = GridBagConstraints.EAST;
    gbc_lblOrganizarPor.insets = new Insets(0, 0, 0, 5);
    gbc_lblOrganizarPor.gridx = 1;
    gbc_lblOrganizarPor.gridy = 2;
    panelPrincipal.add(lblOrganizarPor, gbc_lblOrganizarPor);

    cbEstado = new JComboBox();
    cbEstado.setMaximumRowCount(4);
    cbEstado.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Object selected = cbEstado.getSelectedItem();
            iniLigacao();
            if (selected.toString().equals("Pendente")) {
                try {
                    String sql = "SELECT * FROM view_ecra2 WHERE Estado='P - Pendente' ORDER BY ID_Encomenda DESC";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                    st.executeQuery();
                    st.executeUpdate();
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }
            } else if (selected.toString().equals("Confirmada")) {
                try {
                    String sql = "SELECT * FROM view_ecra2 WHERE Estado='C - Confirmada' ORDER BY ID_Encomenda DESC";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                    st.executeQuery();
                    st.executeUpdate();
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }
            } else if (selected.toString().equals("Anulada")) {
                try {
                    String sql = "SELECT * FROM view_ecra2 WHERE Estado='X - Anulada' ORDER BY ID_Encomenda DESC";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                    st.executeQuery();
                    st.executeUpdate();
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }
            } else if (selected.toString().equals("Reembolsada")) {
                try {
                    String sql = "SELECT * FROM view_ecra2 WHERE Estado='R - Reembolsada' ORDER BY ID_Encomenda DESC";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                    st.executeQuery();
                    st.executeUpdate();
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }
            } else if (selected.toString().equals("Enviada")) {
                try {
                    String sql = "SELECT * FROM view_ecra2 WHERE Estado='S - Enviada' ORDER BY ID_Encomenda DESC";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                    st.executeQuery();
                    st.executeUpdate();
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }
            } else {
                iniLigacao();
                try {
                    String sql = "SELECT * FROM view_ecra2";
                    PreparedStatement st = ligacao.prepareStatement(sql);
                    ResultSet rs = st.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));
                } catch (SQLException se) {
                    se.getLocalizedMessage();
                }
                cbEstado.setSelectedIndex(0);
                closeLigacao();

            }
            closeLigacao();
        }
    });
    cbEstado.setModel(new DefaultComboBoxModel(new String[] { "Enviada",
            "Reembolsada", "Pendente", "Confirmada", "Anulada" }));
    cbEstado.insertItemAt("", 0);
    cbEstado.setSelectedIndex(0);
    GridBagConstraints gbc_cbEstado = new GridBagConstraints();
    gbc_cbEstado.insets = new Insets(0, 0, 0, 5);
    gbc_cbEstado.gridx = 2;
    gbc_cbEstado.gridy = 2;
    panelPrincipal.add(cbEstado, gbc_cbEstado);

    JButton btnAlterarEstado = new JButton("Alterar Estado");
    btnAlterarEstado.addActionListener(new ActionListener() {
        private String targetSwitch;
        private long targetIDb;
        public void actionPerformed(ActionEvent e) {
                radPanel.add(btnEnv);
                radPanel.add(btnCon);
                radPanel.add(btnPen);
                radPanel.add(btnRee);
                radPanel.add(btnAnu);
                if(table.getSelectedRowCount()==0){
                    JOptionPane.showMessageDialog(frame, "Não selecionou nada");
                }else {
                int resposta2 = JOptionPane.showOptionDialog(null,
                        radPanel, "Altere o Estado da Encomenda",
                        JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.QUESTION_MESSAGE, null, null, null);
                if (resposta2 == JOptionPane.OK_OPTION) {
                    int resposta = JOptionPane.showConfirmDialog(frame,
                            "Deseja alterar mesmo o estado da encomenda?",
                            "Confirme a eliminação",
                            JOptionPane.YES_NO_OPTION);
                    if (resposta == JOptionPane.YES_OPTION) {
                        Object targetIdteste = table.getValueAt(table.getSelectedRow(), 0);
                        try {
                            targetIDb = (long) targetIdteste;
                        } catch (ClassCastException ce){
                            ce.getLocalizedMessage();
                            ce.printStackTrace();
                        }

                        iniLigacao();
                        try{
                            PreparedStatement stt = ligacao
                                    .prepareStatement("SELECT view_ecra2_bg.Estado FROM view_ecra2_bg WHERE ID_Encomenda_BG=?");
                            stt.setLong(1, targetIDb);
                            ResultSet resul = stt.executeQuery();
                            resul.next();                               
                            String estadoAtual =resul.getString(1);
                            if(estadoAtual == "S"){
                                btnEnv.setSelected(true);
                            }
                        }catch(SQLException se){
                            se.getLocalizedMessage();
                        }

                        closeLigacao();



                        iniLigacao();
                        try {
                            PreparedStatement stt = ligacao
                                    .prepareStatement("UPDATE view_ecra2_bg SET Estado_BG='?' WHERE ID_Encomenda_BG=?");
                            Object targetSwitcher = btnGrp.getSelection().getSelectedObjects();

                            if(btnEnv.isSelected()){
                                stt.setString(1, "S");
                                stt.setLong(2, targetIDb);
                                stt.executeUpdate();
                            }else if(btnCon.isSelected()){
                                stt.setString(1, "C");
                                stt.setLong(2, targetIDb);
                                stt.executeUpdate();
                            }else if(btnPen.isSelected()){
                                stt.setString(1, "P");
                                stt.setLong(2, targetIDb);
                                stt.executeUpdate();
                            }else if(btnRee.isSelected()){
                                stt.setString(1, "R");
                                stt.setLong(2, targetIDb);
                                stt.executeUpdate();
                            }else if(btnAnu.isSelected()){
                                stt.setString(1, "X");
                                stt.setLong(2, targetIDb);
                                stt.executeUpdate();
                            }else {

                            }
                            if (targetSwitch!=null) {
                                System.out.println(targetSwitch);
                                stt.setLong(2, targetIDb);
                                stt.executeUpdate();
                            }
                            iniLigacao();
                            try {
                                String sql = "SELECT * FROM view_ecra2";
                                PreparedStatement st = ligacao.prepareStatement(sql);
                                ResultSet rs = st.executeQuery();
                                table.setModel(DbUtils.resultSetToTableModel(rs));
                            } catch (SQLException se) {
                                se.getLocalizedMessage();
                            }
                            cbEstado.setSelectedIndex(0);
                            closeLigacao();
                          } catch (SQLException se) {
                            se.getLocalizedMessage();
                        } catch(NullPointerException ne){
                            ne.getLocalizedMessage();
                            ne.printStackTrace();
                        }
                        closeLigacao();
                    }
                }
            }
    }
    });
    GridBagConstraints gbc_btnAlterarEstado = new GridBagConstraints();
    gbc_btnAlterarEstado.insets = new Insets(0, 0, 0, 5);
    gbc_btnAlterarEstado.gridx = 3;
    gbc_btnAlterarEstado.gridy = 2;
    panelPrincipal.add(btnAlterarEstado, gbc_btnAlterarEstado);
    JButton btnDetalhesDeEncomenda = new JButton("Detalhes de encomenda");
    btnDetalhesDeEncomenda.addActionListener(new ActionListener() {
        private long targetIDb;

        public void actionPerformed(ActionEvent arg0) {
            if(table.getSelectedRowCount()==0){
                JOptionPane.showMessageDialog(frame, "Não selecionou nada");
            }else {
            Object targetIdteste = table.getValueAt(table.getSelectedRow(), 0);
            String targetNome = table.getValueAt(table.getSelectedRow(), 4).toString();
            try {
                targetIDb = (long) targetIdteste;
            } catch (ClassCastException ce){
                ce.getLocalizedMessage();
                ce.printStackTrace();
            }
            iniLigacao();
            try {
                String sql = "SELECT Nome_Item, Quantidade, Preço FROM view_ecra3_bg WHERE ID_Encomenda=?";
                PreparedStatement st = ligacao.prepareStatement(sql);
                st.setLong(1, targetIDb);
                ResultSet rs = st.executeQuery();
                table_ecra2.setModel(DbUtils.resultSetToTableModel(rs));

                textNomeShow.setText(targetNome);
                textIdShow.setText(String.valueOf(targetIDb));

                Double precoTotal = 0.0;

                int numItems = table_ecra2.getRowCount();

                for (int i = 0; i < numItems; i++) {
                    precoTotal += Double.parseDouble(table_ecra2
                            .getValueAt(i, 2).toString());
                }
                textTotal.setText(precoTotal+"€");

            } catch (SQLException se) {
                se.getLocalizedMessage();
            }
            CardLayout card = (CardLayout) frame.getContentPane().getLayout();
            card.show(frame.getContentPane(), "panelEncomenda");
            }
        }
    });
    GridBagConstraints gbc_btnDetalhesDeEncomenda = new GridBagConstraints();
    gbc_btnDetalhesDeEncomenda.insets = new Insets(0, 0, 0, 5);
    gbc_btnDetalhesDeEncomenda.gridx = 5;
    gbc_btnDetalhesDeEncomenda.gridy = 2;
    panelPrincipal.add(btnDetalhesDeEncomenda, gbc_btnDetalhesDeEncomenda);

    JPanel panelEncomenda = new JPanel();
    frame.getContentPane().add(panelEncomenda, "panelEncomenda");
    GridBagLayout gbl_panelEncomenda = new GridBagLayout();
    gbl_panelEncomenda.columnWidths = new int[] { 181, 315, 20, 82, 184, 36, 0, 189, 73, 62, 0 };
    gbl_panelEncomenda.rowHeights = new int[] { 37, 0, 0, 0, 0 };
    gbl_panelEncomenda.columnWeights = new double[] { 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
            Double.MIN_VALUE };
    gbl_panelEncomenda.rowWeights = new double[] { 0.0, 0.0, 1.0, 0.0,
            Double.MIN_VALUE };
    panelEncomenda.setLayout(gbl_panelEncomenda);

    JLabel label = new JLabel("");
    label.setIcon(new ImageIcon("C:\\workspace\\Science4youTestes\\LogoPanelPrincipal.png"));
    GridBagConstraints gbc_label = new GridBagConstraints();
    gbc_label.fill = GridBagConstraints.HORIZONTAL;
    gbc_label.gridwidth = 5;
    gbc_label.gridheight = 2;
    gbc_label.insets = new Insets(0, 0, 5, 5);
    gbc_label.gridx = 0;
    gbc_label.gridy = 0;
    panelEncomenda.add(label, gbc_label);

                                    JLabel lblId_1 = new JLabel("ID:");
                                    GridBagConstraints gbc_lblId_1 = new GridBagConstraints();
                                    gbc_lblId_1.anchor = GridBagConstraints.EAST;
                                    gbc_lblId_1.insets = new Insets(0, 0, 5, 5);
                                    gbc_lblId_1.gridx = 5;
                                    gbc_lblId_1.gridy = 0;
                                    panelEncomenda.add(lblId_1, gbc_lblId_1);

                            textIdShow = new JTextField();
                            textIdShow.setEditable(false);
                            GridBagConstraints gbc_textIdShow = new GridBagConstraints();
                            gbc_textIdShow.gridwidth = 2;
                            gbc_textIdShow.fill = GridBagConstraints.HORIZONTAL;
                            gbc_textIdShow.insets = new Insets(0, 0, 5, 5);
                            gbc_textIdShow.gridx = 7;
                            gbc_textIdShow.gridy = 0;
                            panelEncomenda.add(textIdShow, gbc_textIdShow);
                            textIdShow.setColumns(10);

                    JLabel lblNome_1 = new JLabel("Nome:");
                    GridBagConstraints gbc_lblNome_1 = new GridBagConstraints();
                    gbc_lblNome_1.anchor = GridBagConstraints.EAST;
                    gbc_lblNome_1.insets = new Insets(0, 0, 5, 5);
                    gbc_lblNome_1.gridx = 5;
                    gbc_lblNome_1.gridy = 1;
                    panelEncomenda.add(lblNome_1, gbc_lblNome_1);

                                            textNomeShow = new JTextField();
                                            textNomeShow.setEditable(false);
                                            GridBagConstraints gbc_textNomeShow = new GridBagConstraints();
                                            gbc_textNomeShow.gridwidth = 2;
                                            gbc_textNomeShow.fill = GridBagConstraints.HORIZONTAL;
                                            gbc_textNomeShow.insets = new Insets(0, 0, 5, 5);
                                            gbc_textNomeShow.gridx = 7;
                                            gbc_textNomeShow.gridy = 1;
                                            panelEncomenda.add(textNomeShow, gbc_textNomeShow);
                                            textNomeShow.setColumns(10);

                                    JScrollPane scrollPane_1 = new JScrollPane();
                                    GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
                                    gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
                                    gbc_scrollPane_1.gridwidth = 7;
                                    gbc_scrollPane_1.insets = new Insets(0, 0, 5, 5);
                                    gbc_scrollPane_1.gridx = 1;
                                    gbc_scrollPane_1.gridy = 2;
                                    panelEncomenda.add(scrollPane_1, gbc_scrollPane_1);

                                            table_ecra2 = new JTable();
                                            table_ecra2.setModel(new DefaultTableModel(new Object[][] {},
                                                    new String[] {}));
                                            scrollPane_1.setViewportView(table_ecra2);

                            JButton btnVoltarAoMenu = new JButton("Voltar ao menu Principal");
                            btnVoltarAoMenu.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent arg0) {
                                    iniLigacao();
                                    try {
                                        String sql = "SELECT * FROM view_ecra2;";
                                        PreparedStatement st = ligacao.prepareStatement(sql);
                                        ResultSet rs = st.executeQuery();
                                        table.setModel(DbUtils.resultSetToTableModel(rs));
                                        CardLayout card = (CardLayout) frame.getContentPane().getLayout();
                                        card.show(frame.getContentPane(), "panelPrincipal");
                                    } catch (SQLException e) {
                                        e.printStackTrace();
                                    }
                                    closeLigacao();
                                }
                            });
                            GridBagConstraints gbc_btnVoltarAoMenu = new GridBagConstraints();
                            gbc_btnVoltarAoMenu.anchor = GridBagConstraints.WEST;
                            gbc_btnVoltarAoMenu.insets = new Insets(0, 0, 0, 5);
                            gbc_btnVoltarAoMenu.gridx = 1;
                            gbc_btnVoltarAoMenu.gridy = 3;
                            panelEncomenda.add(btnVoltarAoMenu, gbc_btnVoltarAoMenu);

                            JLabel lblTotal = new JLabel("Total:");
                            GridBagConstraints gbc_lblTotal = new GridBagConstraints();
                            gbc_lblTotal.anchor = GridBagConstraints.EAST;
                            gbc_lblTotal.insets = new Insets(0, 0, 0, 5);
                            gbc_lblTotal.gridx = 5;
                            gbc_lblTotal.gridy = 3;
                            panelEncomenda.add(lblTotal, gbc_lblTotal);

                    textTotal = new JTextField();
                    textTotal.setEditable(false);
                    GridBagConstraints gbc_textTotal = new GridBagConstraints();
                    gbc_textTotal.gridwidth = 2;
                    gbc_textTotal.fill = GridBagConstraints.HORIZONTAL;
                    gbc_textTotal.insets = new Insets(0, 0, 0, 5);
                    gbc_textTotal.gridx = 7;
                    gbc_textTotal.gridy = 3;
                    panelEncomenda.add(textTotal, gbc_textTotal);
                    textTotal.setColumns(10);
}

} 提前谢谢

【问题讨论】:

  • 您正在事件调度线程上进行数据库操作,这将阻塞 GUI。

标签: java mysql swing


【解决方案1】:

有一连串的问题......

首先...

Swing 是一个单线程环境,这意味着任何时候您在 Event Dispatching Thread 的上下文中执行长时间运行或阻塞操作时,您都会阻止处理 Event Queue,这会使您的应用程序看起来像它一样冻结...因为它有

更多详情请见Concurrency in Swing

有很多方法可以解决这个问题,但请记住,Swing 也不是线程安全的,这意味着 UI 元素的任何交互、修改或创建都必须在事件调度线程的上下文中完成。解决此问题的一种更简单的方法是使用SwingWorker,它允许您publish 更新 UI 和process EDT 上下文中的更新。

详情请见Worker Threads and SwingWorker...

第二...

KeyListener 不适合与任何文本组件一起使用,有一系列原因,但在您的情况下,您不能保证 Enter 是平台的操作键,这可能会导致某些用户出现问题(人们习惯了事物的工作方式,并且在您尝试更改它时不喜欢它)。

请参阅How to Write an Action Listeners 了解更合适的方法,以便在字段被“操作”时得到通知

第三...

资源管理,基本上,你创建了一堆资源,但你没有适当地管理它们......

比如这个……

try {
    String sql = "SELECT * FROM view_ecra2 ";
    PreparedStatement st = ligacao.prepareStatement(sql);
    ResultSet rs = st.executeQuery();
    table.setModel(DbUtils.resultSetToTableModel(rs));
} catch (SQLException se) {
    se.getLocalizedMessage();
}

应该更像...

String sql = "SELECT * FROM view_ecra2 ";
try (PreparedStatement st = ligacao.prepareStatement(sql)) {
    try (ResultSet rs = st.executeQuery()) {
        table.setModel(DbUtils.resultSetToTableModel(rs));
    }
} catch (SQLException se) {
    se.getLocalizedMessage();
}

try-with-resources 将确保 PreparedStaementResultSet 正确关闭,这将确保数据库不会泄漏可能影响性能的资源

详情请见The try-with-resources Statement

其他...

您用于“密码”和Entrar 按钮的功能似乎是相同的,而不是复制代码,尝试编写一个可以从两个ActionListeners 调用的方法,甚至编写一个@ 987654338@ 可以应用于两个组件...

使用绝对路径 lblNewLabel_2.setIcon(new ImageIcon("C:\\workspace\\Science4youTestes\\LogoPanelPrincipal.png")); 是一个非常糟糕的主意,因为资源的位置可能与其他计算机不同。

更好的解决方案是将资源嵌入应用程序上下文中。使用 Eclipse 和 Netbeans,您可以通过将资源放在项目的 src 目录中来做到这一点,这将确保在构建应用程序时,它们将捆绑在生成的 jar 文件中。

然后您需要使用Class#getResourceClass#getResourceAsStream 来加载它们,具体取决于您的需要。

例如,如果您将LogoPanelPrincipal.png 放在项目src 目录中的resources/images 目录中,则需要使用类似...

BufferedImage img = ImageIO.read(getClass().getResource("resources/images/LogoPanelPrincipal.png");
lblNewLabel_2.setIcon(new ImageIcon(img));

使用ImageIO.read的原因是因为如果无法加载图像,它会抛出IOException,不像ImageIcon,如果由于某种原因无法加载图像,它会静默失败......

详情请见Reading/Loading an Image

切勿在未加密的情况下将密码信息存储在数据库中(真的不在乎这是否只是您为自己做的事情,您应该始终尽可能遵循最佳做法)。

您应该为密码生成某种哈希值(例如 MD5)并将其发送到数据库,而不是存储密码,这样您就不会通过网络发送密码信息,因为它可以被截获...

【讨论】:

  • 您是为这个问题写的还是从某个地方复制/粘贴的?不管他们是否正确,你真的应该为这个解释加分。
  • 个人资料有 174K 的声誉哇。无论如何,反应很好,内容丰富且乐于助人。我看到你在做IOS编程如果你需要appstore优化检查这个bit.ly/1DZDzxC我目前的工作。
  • 我是否需要为每个事件调度线程创建类?我似乎不知道如何将它们连接到应用程序 Windown,因为要让 SwingWorker 工作,我需要创建一个类并将它们扩展到 SwingWorker(“class MeaningOfLifeFinder extends SwingWorker”)我在谁做我的代码?抱歉打扰,但我无法从搜索中得到答案
  • 只有一个 EDT。您可以通过使用类似 SwinUtilitites.invokeLater(Runnable) 的方法返回 EDT
【解决方案2】:

您正在事件调度线程上执行数据库操作,这将阻塞 GUI。 您应该为此使用SwingWorker

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多