Не удается разрешить исключение NullPointerException в приложении java swing

#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();  ....  }