Parameter ändern in try/catch

Shao

Mitglied
Guten Morgen, ich verzweifle seit gestern an einem Fehler der immer dann auftritt wenn ich die Parameter einer JProgressBar bzw. eines JButtons in einem Try/catch block ändern möchte.
Fehler:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
   at MainFrame.verbindung(MainFrame.java:47)
   at MainFrame$2.actionPerformed(MainFrame.java:148)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
   at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$500(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)


Java:
public class MainFrame {

    private JFrame frame;
    private JTextField dbip;
    private JTextField dbusername;
    private JPasswordField dbpassword;
    private JButton connect;
    private JProgressBar ladebalken;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MainFrame window = new MainFrame();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public void verbindung() {
        try
        {
        Class.forName( "com.mysql.jdbc.Driver" ); 
        ladebalken.setValue(10);
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "admin");
        ladebalken.setValue(30);
        Statement stmt = con.createStatement();
        ladebalken.setValue(60);
        String am = "Select * from kunde"; 
        ladebalken.setValue(80);
        ResultSet rst = stmt.executeQuery(am);
        ladebalken.setValue(100);
        connect.setBackground(Color.GREEN);
        while (rst.next()) {

                        System.out.println(rst.getString("Vorname"));
        }
        rst.close();
        stmt.close();
        con.close();
        }
 
        catch ( ClassNotFoundException e)
        {
        System.out.println("Blöd, geht nicht")  ;                                    
        e.printStackTrace();
        }
 
        catch ( SQLException e)
        {
        System.out.println("SQL Fehler");
        e.printStackTrace();
        }
    }
 
Java:
        ladebalken.setValue(10);
und das in 148 ist nur der aufruf von verbindung

ganzer code:
Java:
import java.awt.EventQueue;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.io.*;
import java.sql.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;




public class MainFrame {

    private JFrame frame;
    private JTextField dbip;
    private JTextField dbusername;
    private JPasswordField dbpassword;
    private JButton connect;
    private JProgressBar ladebalken;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MainFrame window = new MainFrame();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public void verbindung() {
        try
        {
        Class.forName( "com.mysql.jdbc.Driver" );
        ladebalken.setValue(10);
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "admin");
        ladebalken.setValue(30);
        Statement stmt = con.createStatement();
        ladebalken.setValue(60);
        String am = "Select * from kunde";
        ladebalken.setValue(80);
        ResultSet rst = stmt.executeQuery(am);
        ladebalken.setValue(100);
        connect.setBackground(Color.GREEN);
        while (rst.next()) {

                        System.out.println(rst.getString("Vorname"));
        }
        rst.close();
        stmt.close();
        con.close();
        }
 
        catch ( ClassNotFoundException e)
        {
        System.out.println("Blöd, geht nicht")  ;                                   
        e.printStackTrace();
        }
 
        catch ( SQLException e)
        {
        System.out.println("SQL Fehler");
        e.printStackTrace();
        }
    }
    public MainFrame() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {

        frame = new JFrame();
        frame.setBounds(100, 100, 899, 553);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        SpringLayout springLayout = new SpringLayout();
        frame.getContentPane().setLayout(springLayout);
      
        dbip = new JTextField();
        springLayout.putConstraint(SpringLayout.NORTH, dbip, 10, SpringLayout.NORTH, frame.getContentPane());
        springLayout.putConstraint(SpringLayout.EAST, dbip, 150, SpringLayout.WEST, frame.getContentPane());
        dbip.setToolTipText("Datenbank (IP)");
        dbip.setHorizontalAlignment(SwingConstants.CENTER);
        springLayout.putConstraint(SpringLayout.WEST, dbip, 10, SpringLayout.WEST, frame.getContentPane());
        springLayout.putConstraint(SpringLayout.SOUTH, dbip, 30, SpringLayout.NORTH, frame.getContentPane());
        frame.getContentPane().add(dbip);
        dbip.setColumns(10);
      
        dbusername = new JTextField();
        springLayout.putConstraint(SpringLayout.WEST, dbusername, 10, SpringLayout.EAST, dbip);
        springLayout.putConstraint(SpringLayout.EAST, dbusername, 130, SpringLayout.EAST, dbip);
        dbusername.setHorizontalAlignment(SwingConstants.CENTER);
        springLayout.putConstraint(SpringLayout.NORTH, dbusername, 10, SpringLayout.NORTH, frame.getContentPane());
        frame.getContentPane().add(dbusername);
        dbusername.setColumns(10);
      
        dbpassword = new JPasswordField();
        springLayout.putConstraint(SpringLayout.NORTH, dbpassword, 10, SpringLayout.NORTH, frame.getContentPane());
        springLayout.putConstraint(SpringLayout.WEST, dbpassword, 10, SpringLayout.EAST, dbusername);
        springLayout.putConstraint(SpringLayout.EAST, dbpassword, 120, SpringLayout.EAST, dbusername);
        frame.getContentPane().add(dbpassword);
      
        JButton connect = new JButton("Verbinden");
        connect.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                int eingabe = 0;
                if (dbip.getText().length() > 0)
                {
                    eingabe = eingabe + 1;
                }
                else
                {
                    dbip.setBackground(Color.RED);
                };
                if (dbusername.getText().length() > 0)
                {
                    eingabe = eingabe + 1;
                }
                else
                {
                    dbusername.setBackground(Color.RED);
                };
                if (dbpassword.getPassword().length > 0)
                {
                    eingabe = eingabe + 1;
                }
                else
                {
                    dbpassword.setBackground(Color.RED);
                };
                if(eingabe == 3)
                {
                    verbindung();
                }

            }
        });
        springLayout.putConstraint(SpringLayout.WEST, connect, 8, SpringLayout.EAST, dbpassword);
        springLayout.putConstraint(SpringLayout.SOUTH, connect, 0, SpringLayout.SOUTH, dbip);
        frame.getContentPane().add(connect);
      
        JProgressBar ladebalken = new JProgressBar();
        springLayout.putConstraint(SpringLayout.NORTH, ladebalken, 0, SpringLayout.NORTH, dbip);
        springLayout.putConstraint(SpringLayout.WEST, ladebalken, 6, SpringLayout.EAST, connect);
        frame.getContentPane().add(ladebalken);
      
      
      
    }
}

ich sehe grade der knopf connect muss noch in verbindung umbenannt werden, was leider am fehler nix ändert
 
Schau mal in die Zeile wo du die JProgressbar initialisiert. Du erstellst lokal eine Variable anstatt deine Instanzvariable zu initialisieren.
 
so endlich wieder am Rechner. ich hab mal versucht zu finden was du meinst aber leider nichts gefunden, was genau meinst du ?

EDIT: so ich habe vor connect und ladebalken die Objekttypen (Jbutton, jprogres) wegenommen und es klappt wie gewollt 🙂
Nur kannst du mir erklären warum genau das so ist ? das ich es fürs nächste mal verstehe 🙂
Und danke natürlich
 
Zuletzt bearbeitet:
Naja wenn du folgendes Konstrukt hast :
Java:
public class Foo{
    private JButton btn;
    public Foo() {
        JButton btn = new JButton() ;
    }
}
Dann erstellst du ja lokal im Konstruktor einen JButton. Den JButton der im gesamten Klassenscope sichtbar ist fässt du ja nie an, d. h. er bleibt null.
In den anderen Methoden greifst du aber auf den JButton zu der Null ist.
Wenn du im Konstruktor das JButton weg nimmst erstellst du keine neue Variable sondern initialisierst die bereits vorhandene.
 

Zurück
Oben