试图使用JButtons

问题描述 投票:-1回答:1

我想用 JButton 在同一个包中的两个不同的.java文件中的组件。当我试着从同一个包中的两个不同的java文件中编译代码时,显示编译器错误。当我尝试将主类移动到与 LoginScreen.java 然后我就可以顺利运行代码了。我想知道为什么如果主类在同一个.java文件中,代码就能运行,但是当主类在同一个包中的单独文件中时,就不能编译。

这是我的代码。

LoginScreen

package PasswordLockbox;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class LoginScreen extends JFrame
{
public JButton submit;
public JButton user;

public LoginScreen()
{
super("Password Lockbox");
setLayout(new FlowLayout());

submit = new JButton("Submit");
add(submit);

user = new JButton("Create new user");
add(user);

HandlerClass handler = new HandlerClass();
submit.addActionListener(handler);
user.addActionListener(handler);



}

private class HandlerClass implements ActionListener
{

    @Override
    public void actionPerformed(ActionEvent event){
    JOptionPane.showMessageDialog(null,String.format("%s", event.getActionCommand()));
    }
}
}

PasswordLockbox

package PasswordLockbox;
import javax.swing.JFrame;
/**
 *
 * @author xxx
 */
public class PasswordLockbox {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    LoginScreen log = new LoginScreen();
    log.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    log.setSize(500,400);
    log.setVisible(true);
}

}

当我试着编译代码时,它给了我这些错误。

javac PasswordLockbox.java
PasswordLockbox.java:19: error: cannot find symbol
        LoginScreen object;
        ^
  symbol:   class LoginScreen
  location: class PasswordLockbox
PasswordLockbox.java:20: error: cannot find symbol
        object = new LoginScreen();
                     ^
  symbol:   class LoginScreen
  location: class PasswordLockbox
2 errors
java swing jframe jbutton cannot-find-symbol
1个回答
0
投票

首先,你没有实际运行代码,用 javac 如果你选择只编译它。PasswordLockbox.java 那么编译器必须知道它在哪里可以找到依赖类 PasswordLockbox.LoginScreen

因此,为了克服这个问题,你应该使用这个命令来编译所有的类。

project>javac PasswordLockbox/*.java

请注意,在这种情况下,你会得到所有的 .class 文件的同一目录中,您持有的 *.java 文件,所以建议使用参数 -d 来放置编译班

然后你可以使用 java 命令,现在你需要使用 -cp 参数(可选)并使用完全限定的类名(即包括包名)。

project>java -cp PasswordLockbox; PasswordLockbox.PasswordLockbox 

例如,如果你改成PasswordLockbox目录,你将不得不使用这个命令。

project/PasswordLockbox>java -cp ..; PasswordLockbox.PasswordLockbox 

使用另一个目录编译类的例子。

project>javac -d classes PasswordLockbox/*.java
project>java -cp classes PasswordLockbox.PasswordLockbox

© www.soinside.com 2019 - 2024. All rights reserved.