2013-07-10 54 views
2

這裏是我的代碼,從我在控制檯中收到的錯誤複製並粘貼。我的登錄系統有什麼問題?

package com.bob; 

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 

public class BobLogin extends JFrame implements ActionListener { 

    // Declare all of the component variables. 
    private JButton login; 
    private JTextField usernameField; 
    private JPasswordField passwordField; 
    private JLabel username; 
    private JLabel password; 
    private JFrame loginFrame; 

    private String usernameText = "Username:"; 
    private int usernameColumns = 20; 
    private String passwordText = "Password:"; 
    private int passwordColumns = 20; 

    //Declare all of the constants. 
    private static final int WIDTH = 300; 
    private static final int HEIGHT = 300; 

    //Login password and username. 
    private static final String correctUsername = "Admin"; 
    private static final String correctPassword = "Password"; 

    //Constructor that calls initliaziation method when an object is created. 
    public BobLogin() { 
     initializeGUI(); 
    } 

    //Sets up the login GUI. 
    private void initializeGUI() { 
     JButton login = new JButton("Login"); 
     JTextField usernameField = new JTextField(usernameColumns); 
     JPasswordField passwordField = new JPasswordField(passwordColumns); 
     JLabel username = new JLabel(usernameText); 
     JLabel password = new JLabel(passwordText); 
     JFrame loginFrame = new JFrame(); 
     JPanel loginPanel = new JPanel(new FlowLayout()); 
     loginPanel.add(username); 
     loginPanel.add(usernameField); 
     loginPanel.add(password); 
     loginPanel.add(passwordField); 
     loginPanel.add(login); 
     login.addActionListener(this); 
     loginFrame.add(loginPanel); 
     // loginFrame.setSize(WIDTH, HEIGHT); 
     loginFrame.pack(); 
     loginFrame.setLocationRelativeTo(null); 
     loginFrame.setResizable(false); 
     loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     loginFrame.setVisible(true); 
     //username.req 

    } 

    public static void main(String[] args) { 
     BobLogin bobLogin = new BobLogin(); 
    } 

    //What happens when the "Login" button is clicked. 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     String usernameResponse = usernameField.getText(); 
     //String passwordResponse = passwordField.getText(); 
     if(usernameResponse.equalsIgnoreCase("Admin")){ 
      System.out.println("Correct"); 
     }else{ 
      System.exit(0); 
     } 
    } 

} 

這是我在打「登錄」時得到的錯誤。一切工作正常,但每當我點擊登錄按鈕,我得到這個錯誤在控制檯:

at com.bob.BobLogin.actionPerformed(BobLogin.java:75) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
     at java.awt.Component.processMouseEvent(Component.java:6505) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
     at java.awt.Component.processEvent(Component.java:6270) 
     at java.awt.Container.processEvent(Container.java:2229) 
     at java.awt.Component.dispatchEventImpl(Component.java:4861) 
     at java.awt.Container.dispatchEventImpl(Container.java:2287) 
     at java.awt.Component.dispatchEvent(Component.java:4687) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
     at java.awt.Container.dispatchEventImpl(Container.java:2273) 
     at java.awt.Window.dispatchEventImpl(Window.java:2719) 
     at java.awt.Component.dispatchEvent(Component.java:4687) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) 
     at java.awt.EventQueue.access$200(EventQueue.java:103) 
     at java.awt.EventQueue$3.run(EventQueue.java:682) 
     at java.awt.EventQueue$3.run(EventQueue.java:680) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
     at java.awt.EventQueue$4.run(EventQueue.java:696) 
     at java.awt.EventQueue$4.run(EventQueue.java:694) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:693) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
+0

@trashgod我是新來的,不知道!謝謝你,先生! –

回答

3

您使用實例變量usernameFieldActionEvent被觸發,獲得文本。問題是,您正在創建新的本地usernameField變量,而您的initializeGUI方法已經作爲實例變量創建,但未初始化。要解決您的問題,請在initializeGUI方法之外初始化您的usernameField變量。這是工作代碼:

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 

public class BobLogin extends JFrame implements ActionListener { 

    // Declare all of the component variables. 
    private JButton login; 
    //Here is an issue fix! 
    private JTextField usernameField = new JTextField(20); 
    private JPasswordField passwordField = new JPasswordField(20);; 
    private JLabel username; 
    private JLabel password; 
    private JFrame loginFrame; 

    private String usernameText = "Username:"; 
    private int usernameColumns = 20; 
    private String passwordText = "Password:"; 
    private int passwordColumns = 20; 

    //Declare all of the constants. 
    private static final int WIDTH = 300; 
    private static final int HEIGHT = 300; 

    //Login password and username. 
    private static final String correctUsername = "Admin"; 
    private static final String correctPassword = "Password"; 

    //Constructor that calls initliaziation method when an object is created. 
    public BobLogin() { 
     initializeGUI(); 
    } 

    //Sets up the login GUI. 
    private void initializeGUI() { 
     JButton login = new JButton("Login"); 
     JLabel username = new JLabel(usernameText); 
     JLabel password = new JLabel(passwordText); 
     JFrame loginFrame = new JFrame(); 
     JPanel loginPanel = new JPanel(new FlowLayout()); 
     loginPanel.add(username); 
     loginPanel.add(usernameField); 
     loginPanel.add(password); 
     loginPanel.add(passwordField); 
     loginPanel.add(login); 
     login.addActionListener(this); 
     loginFrame.add(loginPanel); 
     // loginFrame.setSize(WIDTH, HEIGHT); 
     loginFrame.pack(); 
     loginFrame.setLocationRelativeTo(null); 
     loginFrame.setResizable(false); 
     loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     loginFrame.setVisible(true); 
     //username.req 

    } 

    public static void main(String[] args) { 
     BobLogin bobLogin = new BobLogin(); 
    } 

    //What happens when the "Login" button is clicked. 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     String usernameResponse = usernameField.getText(); 
     //String passwordResponse = passwordField.getText(); 
     if(usernameResponse.equalsIgnoreCase("Admin")){ 
      System.out.println("Correct"); 
     }else{ 
      System.exit(0); 
     } 
    } 

} 
+0

非常感謝!這固定了一切!再次感謝!!! –

2

你在你的initialize()方法

JTextField usernameField = new JTextField(usernameColumns); 

這實際上是創造usernameField的本地實例有這一行。

嘗試

usernameField = new JTextField(usernameColumns); 

來初始化類變量。

這個概念也適用於你聲明的其他一些類變量。

+0

修復它。謝謝你幫忙! –