0
public class checkUsernames extends JFrame {
private static JTextArea textArea1;
private static JButton button1;
private static JScrollPane scrollPane1;
private static JTextField textField1;
private static JPasswordField passwordField1;
private static JLabel label3;
private static JButton button2;
private static JLabel label1;
private static JLabel label2;

public checkUsernames() {
    initComponents();
}

public static void main(String[] args) throws IOException {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Nimbus isn't available");
        }

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                checkUsernames GUI = new checkUsernames();
                GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                GUI.setVisible(true);
            }
        });
        String username = textField1.toString();
        String password = passwordField1.toString();

Exception in thread "main" java.lang.NullPointerException

checkUsernames是唯一的班级。当我尝试运行应用程序时,程序会进一步执行(在没有字符串用户名和字符串密码的情况下继续执行)而不等待输入。我怎样才能解决这个问题?

4

4 回答 4

2

如果您希望代码执行在等待输入时停止,请使用JFramea modalJDialogJOptionPane代替。

于 2011-05-12T01:53:39.850 回答
1

您的私有静态成员似乎都没有被初始化。在使用之前初始化创建的每个对象之前,您不会超过 NullPointerException。

我不知道你在说什么。你必须对所有这些对象做这样的事情:

private static JTextArea textArea1 = new JTextArea();

您没有输入用户名或密码;您正在创建一个文本区域 UI 元素,当您输入它们时可以接受它们。

于 2011-05-12T01:39:59.023 回答
1

好吧, invokeLater稍后会调用代码。它保证 textfield1.toString()在checkUserNames()之后执行

于 2011-05-12T01:45:05.780 回答
1

为什么不使用SwingUtilities.invokeAndWait()代替?这似乎可以立即解决您的问题。

这是一个简单的例子:

import javax.swing.SwingUtilities;

public class InvokeAndWaitExample {
    public static void main (String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable () {
                public void run () {
                    System.out.println("Hello World on " + Thread.currentThread());
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("Finished on " + Thread.currentThread());
    }
}
于 2011-05-12T20:05:49.437 回答