Я новичок в упаковке и довольно новичок в программировании, и я столкнулся с проблемой, когда виртуальная машина не может найти внутренний класс, созданный одним из моих объектов класса.
Краткая справка об этом проекте, это приложение для копилки, которое я создаю для своих детей. Программа отлично работает в командной строке, но как только я ее упакую, у меня появляется эта ошибка. Я хотел бы упаковать его, чтобы дети могли открывать его по мере необходимости на рабочем столе. Я упаковал его, используя следующую командную строку:
java cmf Bank.mf BankMain.class Login.class BankGUI.class BankGUI $ 1.class AccountGUI.class AccountGUI $ 1.class AccountGUI $ 1.класс Account.class
Проблема, которая возникает внутри BankGUI.class. У меня есть функция прослушивателя действий, которая не является частью объекта класса, но вызывается объектом класса. Я пытался сделать это методом класса, но это не имело значения.
Цель этого кода - открыть экран входа в систему, ребенок может ввести свое имя пользователя и пароль, система либо ничего не делает, если информация неверна, либо открывает объект AccountGUI на основе учетных данных и закрывает оригинальный объект BankGUI. Мне пришло в голову, что создание «ответа» статическим методом может помочь в решении этой проблемы, но, подумав (и испытанием), имеет смысл, что оно не имеет никакого отношения к тому факту, что BankGUI открывает внутренний класс. Я чувствую, что проблема связана с закрытием исходного объекта BankGUI, в то время как остальные объекты открыты, но я не могу видеть, где и как, и нет ссылок в Интернете, которые помогли бы. Любое понимание будет оценено!
...boolean login = false;
Login log = new Login();
Font f = new Font("Helvetica", Font.BOLD, 30);
Font f2 = new Font("Helvetica", Font.BOLD, 60);
JPanel mainPanel = new JPanel();
mainPanel.setBackground(Color.BLACK);
add(mainPanel);
JPanel panel = new JPanel(new GridLayout(6, 1));
mainPanel.add(panel, BorderLayout.CENTER);
panel.setBackground(Color.BLACK);
JPanel blank = new JPanel();
blank.setBackground(Color.BLACK);
panel.add(blank);
JPanel blank1 = new JPanel();
blank1.setBackground(Color.BLACK);
panel.add(blank1);
JPanel welcomePanel = new JPanel();
welcomePanel.setBackground(Color.BLACK);
panel.add(welcomePanel);
JLabel welcomeLabel = new JLabel("Please log into your account");
welcomeLabel.setFont(f);
welcomeLabel.setBackground(Color.BLACK);
welcomeLabel.setForeground(Color.WHITE);
welcomePanel.add(welcomeLabel);
JPanel user = new JPanel();
user.setLayout(new BorderLayout());
user.setBackground(Color.BLACK);
panel.add(user);
JLabel name = new JLabel("USER NAME: ");
name.setFont(f);
name.setBackground(Color.BLACK);
name.setForeground(Color.WHITE);
name.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
JTextField nInput = new JTextField();
nInput.setFont(f2);
nInput.setBackground(Color.BLACK);
nInput.setForeground(Color.WHITE);
JPanel pass = new JPanel();
pass.setLayout(new BorderLayout());
pass.setBackground(Color.BLACK);
panel.add(pass);
JLabel password = new JLabel("PASSWORD: ");
password.setFont(f);
password.setBackground(Color.BLACK);
password.setForeground(Color.WHITE);
password.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
JPasswordField pw = new JPasswordField(10);
pw.setFont(f2);
pw.setBackground(Color.BLACK);
pw.setForeground(Color.WHITE);
panel.add(blank);
JButton submit = new JButton("SUBMIT");
submit.setFont(f);
submit.setBackground(Color.GRAY);
submit.setForeground(Color.WHITE);
user.add(name, BorderLayout.WEST);
user.add(nInput, BorderLayout.CENTER);
pass.add(password, BorderLayout.WEST);
pass.add(pw, BorderLayout.CENTER);
panel.add(submit);
respond(submit, nInput, pw, log, login);
}
public void respond(JButton b, JTextField tf, JPasswordField pf, Login log, boolean login) {
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
switch (s) {
case ("SUBMIT"):
log.setUser(tf.getText());
char[] password = pf.getPassword();
String pw = String.valueOf(password);
log.setPassword(pw);
if (log.getVerification()) {
AccountGUI open = new AccountGUI(tf.getText(), pw);
open.setVisible(true);
dispose();
}
break;
}
}
});
}
}