我不熟悉包装,也不熟悉编程,因此遇到了一个问题,即VM无法找到由我的一个类对象创建的内部类。
此项目的快速背景知识,是我正在为我的孩子们整理的一个存钱罐应用程序。该程序在命令行中可以正常运行,但是一旦打包,就会出现此错误。我想打包它,以便孩子们可以根据需要在桌面上打开它。我使用以下命令行将其打包:
java cmf Bank.mf BankMain.class Login.class BankGUI.class BankGUI $ 1.class AccountGUI.class AccountGUI $ 1.class AccountGUI $ 1.class Account.class
出现的问题在BankGUI.class内部,我有一个Action Listener函数,它不是类对象的一部分,但是由类对象调用。我尝试将其设为类方法,但这没什么区别。
此代码的目的是打开登录屏幕,子代可以键入其用户名和密码,如果信息不正确,则系统不执行任何操作,或者根据凭据打开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;
}
}
});
}
}