Bloki try/catch/finally nie chcą działać

0

Witam serdecznie.

Mam problem piszę program, który będzie konstruował prostą obudowę głośnikową jednak mam problem przy komunikacji z bazą. Gdy odpalam przykład napotkany w internecie to komunikacja z bazą jest. W tym kawałku nie jest wykonywany blok try/catch i nie wiem co jest tego przyczyną. Gdy odpalę projekt to program zachowuje się tak jakby tego kodu tam w ogóle nie było. Poniżej załączam cały kod w jakim występuje problem:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package easyspeakerbuilder;

import java.awt.Window;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

/**
 *
 * @author SOpEL
 */
public class DatabaseManagement extends javax.swing.JPanel
{
    String DB_URL = "jdbc:postgresql://localhost:5432/EasySpeakerBuilderDatabase";
    String USER = "postgres";
    String PASS = "databaseadmin";
    Connection databaseConnection = null;
    Statement databaseStatements = null;
    ResultSet databaseData = null;
    /**
     * Creates new form DatabaseManagement
     */
    public DatabaseManagement()
    {
        initDatabaseConnection();
        initComponents();
        Window window = SwingUtilities.windowForComponent(this);   
    }

    public void initDatabaseConnection()
    {
        try
        {
           Class.forName("org.postgresql.Driver");
           databaseConnection = DriverManager.getConnection(DB_URL, USER, PASS);
           databaseStatements = databaseConnection.createStatement();
           databaseData = databaseStatements.executeQuery("SELECT * FROM speakers");
           String data[] = new String[23];
           data[0] = databaseData.getString("id");
           data[1] = databaseData.getString("marka");
           data[2] = databaseData.getString("model");
           data[3] = databaseData.getString("b");
           data[4] = databaseData.getString("bi");
           data[5] = databaseData.getString("l");
           data[6] = databaseData.getString("cas");
           data[7] = databaseData.getString("cms");
           data[8] = databaseData.getString("fs");
           data[9] = databaseData.getString("fsa");
           data[10] = databaseData.getString("lvc");
           data[11] = databaseData.getString("mmd");
           data[12] = databaseData.getString("mms");
           data[13] = databaseData.getString("qes");
           data[14] = databaseData.getString("qms");
           data[15] = databaseData.getString("qts");
           data[16] = databaseData.getString("ras");
           data[17] = databaseData.getString("re");
           data[18] = databaseData.getString("res");
           data[19] = databaseData.getString("rms");
           data[20] = databaseData.getString("sd");
           data[21] = databaseData.getString("vas");
           data[22] = databaseData.getString("n0");                                         
           JOptionPane.showMessageDialog(null, data[1], "Test", JOptionPane.INFORMATION_MESSAGE);
           System.out.println(data[1]);
        }
        catch(SQLException e)
        {
           JDialog dialog = new JDialog();
           JPanel panel = new JPanel();
           JLabel label = new JLabel("<html>Wystąpił błąd przy próbie<br>uzyskania dostępu do bazy danych.<br></html>" + e.getMessage(), SwingConstants.CENTER);
           JButton button = new JButton();
           button.setText("OK");
           panel.add(label);
           panel.add(button);
           dialog.setTitle("Błąd");
           dialog.add(panel);           
        }
        catch (ClassNotFoundException ex)
        {
            Logger.getLogger(DatabaseManagement.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents()
    {

        jScrollPane1 = new javax.swing.JScrollPane();
        databaseDataTable = new javax.swing.JTable();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        databaseDataTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][]
            {
                {},
                {},
                {},
                {}
            },
            new String []
            {

            }
        ));
        jScrollPane1.setViewportView(databaseDataTable);

        jTextField1.setText("jTextField1");

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 646, Short.MAX_VALUE)
                    .addComponent(jTextField1))
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(30, 30, 30)
                .addComponent(jButton1)
                .addContainerGap(87, Short.MAX_VALUE))
        );
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                         
    {                                             
        initDatabaseConnection();
    }                                        


    // Variables declaration - do not modify                     
    private javax.swing.JTable databaseDataTable;
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}
0

Cześć. Gdzie wywołujesz konstruktor tej klasy?
Pierwsza uwaga, jeśli coś ma się komunikować z bazą danych to niech nie rozszerza jpanela.
Na JPanelu możesz wyświetlić informacje z jakiegoś obiektu z bazy danych, ale nigdy nie mieszaj warstw - Jpanel jest widokiem, badanych jest warstwą zarządzania danymi. Może być tak, ze kod się nie wykonuje bo konstruktor jest wywoływany w wątku swinga, albo netbeans (kod wygląda jak z netbeansa) nie używa tego konstruktora, tylko jakiś inny...

0

Już poradziłem sobie. Musiałem projekt wyczyścić i przebudować :). Często zdarza mi się, że przez przypadek odpalam projekt na projekcie... W tym przypadku wystarczyło wyczyścić i przebudować projekt ponownie i wszystko działa. Masz rację działam w NetBeansie (robię to na szybko w trybie GUI). Tutaj używam paneli bo są one częścią kreatora obudowy bo tak jest szybciej i wygodniej dla mnie. Gdyby mi nie zależało na czasie zrobiłbym to bardziej "po ludzku". Jak całą aplikację złożę to myślę, że będę ją z biegiem czasu poprawiał i udoskonalał. Na razie chcę tylko uzyskać najważniejsze dla mnie funkcje, a potem będę się martwił resztą. Chciałem to pisać w Eclipsie, ale porównując wygodę korzystania ze środowisk programistycznych wybrałem NetBeansa (mimo tego, że bywa czasami denerwujący). Temat uważam za zakończony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1