Java-приложение: получение ввода перед запуском - PullRequest
0 голосов
/ 12 мая 2011
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 ]

2 голосов
/ 12 мая 2011

Если вы хотите, чтобы выполнение кода остановилось во время ожидания ввода, вместо этого сделайте JFrame модальным JDialog или JOptionPane.

1 голос
/ 13 мая 2011

Почему вы не используете 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());
    }
}
1 голос
/ 12 мая 2011

Ну invokeLater вызовет код позже. Это не гарантирует гарантию textfield1.toString () для выполнения после checkUserNames ()

1 голос
/ 12 мая 2011

Ни один из ваших личных статических членов, похоже, не инициализирован вообще. Вы не пройдете исключение NullPointerException, пока не инициализируете каждый создаваемый объект, прежде чем использовать его.

Понятия не имею, о чем ты. Вы должны сделать что-то подобное для всех этих объектов:

private static JTextArea textArea1 = new JTextArea();

Вы не вводите имя пользователя или пароль; вы создаете элемент пользовательского интерфейса текстовой области, который может принимать их при вводе.

...