2014-07-07 4 views
0

여기서 null 예외의 원인은 무엇입니까? 나는 그것을 볼 수 없습니다 .. 눈의 두 번째 세트는이 초보자 자바 학생을 도울 것입니다.이 응용 프로그램은 기본적으로 게임 팀에 관한 5 가지 정보를 캡처하여 mySQL 데이터베이스에 삽입합니다.Java 예외 nullpointerexception 오류

에러는 아래와 같다 : 예외 스레드 "AWT-EventQueue의-0"InsertTeamInfo.access $ 50 (InsertTeamInfo.java:11)에서 InsertTeamInfo.insertRecord (InsertTeamInfo.java:130)에서 java.lang.NullPointerException이

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.*; 

public class InsertTeamInfo extends JFrame{ 
    private String sql; 
    private Connection con; 
    private Statement stat; 
    private JButton btnSave; 

    private JTextField txtTeam; 
    private JTextField txtCity; 
    private JTextField txtYear; 
    private JTextField txtLoserTeam; 
    private JTextField txtLoserCity; 

    private JLabel lblTeam; 
    private JLabel lblCity; 
    private JLabel lblYear; 
    private JLabel lblLoserTeam; 
    private JLabel lblLoserCity;  

    public InsertTeamInfo(){ 
    super("Favorite Team"); 

    btnSave = new JButton("Save"); 

    txtTeam = new JTextField(""); 
    txtCity = new JTextField(""); 
    txtYear = new JTextField(""); 
    txtLoserTeam = new JTextField(""); 
    txtLoserCity = new JTextField(""); 

    lblTeam = new JLabel("Team"); 
    lblCity = new JLabel("City"); 
    lblYear = new JLabel("Year Played"); 
    lblLoserTeam = new JLabel("Loser Team"); 
    lblLoserCity = new JLabel("Loser City"); 

    txtYear.setEditable(true); 
    txtLoserTeam.setEditable(true); 
    txtLoserCity.setEditable(true); 
    txtTeam.setEditable(true); 
    txtCity.setEditable(true); 

    } 

    public void launchJFrame(){ 
    //width - height 
    setSize(500, 300); 
    getContentPane().setLayout(null); 
    getContentPane().setBackground(Color.white); 

    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    getContentPane().add(btnSave); 

    getContentPane().add(txtTeam); 
    getContentPane().add(txtCity); 
    getContentPane().add(txtYear); 
    getContentPane().add(txtLoserTeam); 
    getContentPane().add(txtLoserCity); 

    getContentPane().add(lblTeam); 
    getContentPane().add(lblCity);  
    getContentPane().add(lblYear); 
    getContentPane().add(lblLoserTeam); 
    getContentPane().add(lblLoserCity); 

    lblTeam.setBounds(new Rectangle(65,20,100,30)); 
    lblCity.setBounds(new Rectangle(65,55,100,30)); 
    lblYear.setBounds(new Rectangle(65, 85, 100, 30)); 
    lblLoserTeam.setBounds(new Rectangle(65, 115, 100, 30)); 
    lblLoserCity.setBounds(new Rectangle(65, 145, 100, 30)); 

    txtTeam.setBounds(new Rectangle(210, 20, 150, 30)); 
    txtCity.setBounds(new Rectangle(210, 54, 150, 30)); 
    txtYear.setBounds(new Rectangle(210, 86, 150, 30)); 
    txtLoserTeam.setBounds(new Rectangle(210, 119, 150, 30)); 
    txtLoserCity.setBounds(new Rectangle(210, 150, 150, 30)); 

    btnSave.setBounds(new Rectangle(65, 190, 90, 30)); 
    setVisible(true); 

    addWindowListener(new java.awt.event.WindowAdapter() { 
     public void windowClosing(java.awt.event.WindowEvent evt) { 
     shutDown(); 
     } 
    }); 

    btnSave.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ //Handle Save button click event 
      insertRecord(); 
      } 
    }); 
} 

private void insertRecord(){ 
    try { 
     DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
     con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/week5", "root","Saras231"); 
    } 
    catch(Exception ex){ 
     JOptionPane.showMessageDialog(null, "Error connection to database.");   
     System.exit(0); 
    } 

    try { 
     sql = "INSERT INTO Wins_S001 (Team, City, Year_T, LoserTeam, LoserCity) VALUES (?, ?, ?, ?, ?)"; 
     PreparedStatement preparedStatement = con.prepareStatement(sql); 
     preparedStatement.setString(1, txtTeam.getText()); 
     preparedStatement.setString(2, txtCity.getText()); 
     preparedStatement.setString(3, txtYear.getText()); 
     preparedStatement.setString(4, txtLoserTeam.getText()); 
     preparedStatement.setString(5, txtLoserCity.getText()); 
     preparedStatement.executeUpdate(); 
     JOptionPane.showMessageDialog(null, "Data Inserted Successfully");   
    } 
    catch(SQLException ex){ 
     ex.printStackTrace(); 
     JOptionPane.showMessageDialog(null, "Data Insert failed.");   
    } 

    try{ 
     stat.close(); 
     con.close(); 
    } 
    catch(SQLException ex){ 
     JOptionPane.showMessageDialog(null, "All active connection closed to the database.");   
    } 

} 

    private void shutDown(){ 
    int returnVal = JOptionPane.showConfirmDialog(this, "Are you sure you want to quit?"); 

    if(returnVal == JOptionPane.YES_OPTION){ 

     System.exit(0); 
    } 
    } 

    public static void main(String[] args){ 
    InsertTeamInfo gui = new InsertTeamInfo(); 
    gui.launchJFrame(); 
    } 
} 
+6

문제의 원인이되는 코드 줄을 표시하는 위치를 포함하여 스택 추적을 게시하십시오. 그런 다음 해당 줄 번호와 일치하는 코드 줄을 알려주십시오. – MarsAtomic

답변

1

stat 인스턴스 변수를 제거하십시오. con 인스턴스 변수를 제거하십시오. sql 인스턴스 변수를 제거하십시오. 그들은 모두 로컬 변수 여야합니다 (그리고 그 원인은 아마도 preparedStatement을 닫는 대신 stat을 닫는 것입니다. 스택 추적의 행 번호가이를 확인해야합니다).

또한 finally 블록에서 닫혀 있는지 확인하여 닫힌 상태인지 확인하십시오. 그리고 준비된 문을 닫으면 예외가 발생하면 연결이 닫히지 않습니다.

+0

정말 고마워요! 나는 당신의 모든 제안을 따랐고 그것을 돌 보았다. – Athapali

+0

다음 번에는 예외 스택 추적을주의 깊게 읽습니다. 줄 번호는 예외가 throw되는 위치를 알려주므로 문제를 삼중 작업으로 찾습니다. 또한 스택 추적을 게시 할 때 참조하는 줄 번호를 알려주십시오. –