#java #nullpointerexception
#Ява #исключение nullpointerexception
Вопрос:
Я создал простую страницу входа в систему с помощью Java Swing в Eclipse, и как только я запускаю и ввожу входные данные, я получаю сообщение об ошибке java.lang.NullPointerException
import java.lang.String; import java.awt.EventQueue; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JPasswordField; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class trail extends JFrame { Connection connection =null; private JPanel contentPane; private JTextField id; private JPasswordField passwordField; public static void main(String[] args) { String jdbcURL = "jdbc:postgresql://localhost:5432/postgres"; String username = "postgres"; String password = "......."; try { Connection connection = DriverManager.getConnection(jdbcURL, username, password); System.out.print("Connected"); connection.close(); } catch(SQLException e) { System.out.println("Error in connection"); e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { try { trail frame = new trail(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public trail() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 519, 550); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lblNewLabel = new JLabel("username"); lblNewLabel.setBounds(94, 114, 45, 13); contentPane.add(lblNewLabel); id = new JTextField(); id.setBounds(246, 111, 96, 19); contentPane.add(id); id.setColumns(10); JLabel lblNewLabel_1 = new JLabel("password"); lblNewLabel_1.setBounds(94, 178, 45, 13); contentPane.add(lblNewLabel_1); passwordField = new JPasswordField(); passwordField.setBounds(246, 175, 96, 19); contentPane.add(passwordField); JButton btnlogin = new JButton("login"); btnlogin.addActionListener(new ActionListener() { @SuppressWarnings("deprecation") public void actionPerformed(ActionEvent e) { try { String query = "select * from users where username = ? and password = ?"; PreparedStatement pst=connection.prepareStatement(query); pst.setString(1, id.getText()); pst.setString(2, passwordField.getText()); ResultSet rs = pst.executeQuery(); int count = 0; while(rs.next()) { count = count 1; if(count == 1) { JOptionPane.showMessageDialog(null, "Password and username is correct"); } else if(countgt;1) { JOptionPane.showMessageDialog(null, "redundancy detected"); } else { JOptionPane.showMessageDialog(null,"Incorrect credentials"); } } rs.close(); pst.close(); } catch(Exception e1) { JOptionPane.showMessageDialog(null, e1); } } }); btnlogin.setBounds(179, 259, 85, 21); contentPane.add(btnlogin); } }
Комментарии:
1. Было бы полезно увидеть код под изображением, вызвавшим исключение. Отредактируйте свой пост и скопируйте в него код. Вам необходимо установить соединение с базой данных перед выполнением запроса.
2. соединение с базой данных было успешно установлено!!! @DevilsHnd
3. Почему вы закрываете это соединение, как только открываете его?!!!
4. я изменил его, знаю…все та же ошибка исключения нулевой точки @DevilsHnd
5. ну, ошибка улавливается уловом(e1).. который находится в bottom…so может быть, что-то пошло не так внутри блока try ниже списка действий btnlogin внизу @DevilsHnd
Ответ №1:
Вы объявили Connection connection =null;
позже в блоке try, который вы используете, как
Connection connection = DriverManager.getConnection(jdbcURL, username, password)
что является совершенно другим Connection
объектом. вы должны использовать что-то вроде .
this.connection=DriverManager.getConnection(jdbcURL, username, password)
Также вы можете переместить свой код другим способом, например
public void initialize() { String jdbcURL = "jdbc:postgresql://localhost:5432/your_db"; String username = "postgres"; String password = "password"; try { this.connection = DriverManager.getConnection(jdbcURL, username, password); System.out.print("Connected"); connection.close(); } catch(SQLException e) { System.out.println("Error in connection"); e.printStackTrace(); } }
И вызовите внутри конструктора, как
public trail() { initialize(); .... }