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

入力を待っている間にコードの実行を停止したい場合は、代わりにorをJFrameモーダルにします。JDialogJOptionPane

于 2011-05-12T01:53:39.850 に答える
1

さて、 invokeLaterは後でコードを呼び出します。checkUserNames()のに textfield1.toString() を実行することは保証されていません

于 2011-05-12T01:45:05.780 に答える
1

プライベートな静的メンバーはまったく初期化されていないようです。作成したすべてのオブジェクトを使用する前に初期化するまで、NullPointerException を通過することはできません。

私はあなたが何について話しているのか分かりません。これらすべてのオブジェクトに対して、次のようなことを行う必要があります。

private static JTextArea textArea1 = new JTextArea();

ユーザー名またはパスワードを入力していません。それらを入力したときにそれらを受け入れることができるテキスト領域UI要素を作成しています。

于 2011-05-12T01:39:59.023 に答える
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 に答える