我想用 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
首先,你没有实际运行代码,用 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