............ как я могу решить это? - PullRequest
0 голосов
/ 16 февраля 2020

Я пытался скомпилировать мою простую программу. Но когда я хочу скомпилировать эту программу:

import javax.swing.*;

public class First {


JFrame f;  

First(){  


f=new JFrame();   

    String i1 = JOptionPane.showInputDialog(f,"Enter Name");      
}  

public static void main(String[] args) {  


new JOptionPane();  
}  

}

я получаю это сообщение: <No main classes found>

и моя IDE : netbeans

и это фото:

https://i.stack.imgur.com/pq6Y8.png

1 Ответ

0 голосов
/ 17 февраля 2020

Что ж, то, как вы создали этот класс, заставляет задуматься, есть ли в вашем проекте еще один класс, который, как предполагается, фактически является классом startup , поскольку в Чтобы отобразить поле ввода для ввода имени, вам нужно создать экземпляр First (не JOptionPane ()), чтобы конструктор мог его запустить.

Если это единственный класс в вашем проекте, вы можете запустить окно ввода, но вам нужно создать экземпляр First в методе main (), например:

public static void main(String[] args) {
    /* You could just use:  new First();  but you'll see 
       the NetBeans yellow Warning underline beneath the 
       code line which you can ignore. Better to provide
       a variable to the instance of First as done here. */
    First f2 = new First();  
}

В целом, может быть лучше просто поместить приглашение для ввода имени непосредственно в метод main () . После того, как имя введено, вы также захотите сохранить это имя в строковой переменной, которая, возможно, является глобальной для всего класса, а не только в рамках Конструктора. String i1 возможно, следует объявить как переменную-член класса и назвать что-то более подходящее, например: String userName;.

Я понял идею JFrame, поскольку JOptionPanes любят прятаться за IDE ( или другое «Вверху» windows), если отсутствует родительский компонент и используется null . Но если вы сделаете это, настройте его так, чтобы оно непреднамеренно не закрывало ваше приложение со значением свойства EXIT_ON_CLOSE по умолчанию. Вы бы хотели, чтобы это было DISPOSE_ON_CLOSE. Вы также хотели бы, чтобы свойство JFrame setAlwaysOnTop было установлено в логическое значение true . После использования JOptionPane обязательно удалите JFrame, иначе ваше приложение будет оставаться активным, пока что-то не закроет его. Вы можете увидеть это в следующем примере:

import javax.swing.*;

public class First {

    private static JFrame dialogPARENT;    // Parent used for dialogs that don't have a parent.
    private static String userName;        // Holds the User Name supplied in either the Input Box or Setter method.

    // Class Constructor
    First() {
        dialogPARENT = new JFrame();
        dialogPARENT.setAlwaysOnTop(true);
        dialogPARENT.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        dialogPARENT.setLocationRelativeTo(null);

        userName = JOptionPane.showInputDialog(dialogPARENT, "Enter Your Name:");
        dialogPARENT.dispose();  // dispose of the JFrame.
    }

    public static void main(String[] args) {
        First first = new First();   // Fires the constructor

        // Display the User Name. As you can see, basic HTML can 
        // be used in your Message Box dialog display string.
        JOptionPane.showMessageDialog(dialogPARENT, "<html>The name you entered is:<br><br>"
                + "<center><font color=red><b>" + userName + "</b></font></center><br></html>", 
                  "Supplied User Name", JOptionPane.INFORMATION_MESSAGE);
        dialogPARENT.dispose();   // dispose of the JFrame.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...