Попытка использовать JButtons - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь использовать 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

1 Ответ

0 голосов
/ 04 мая 2020

Во-первых, вы на самом деле не запускаете код, а javac вы его компилируете. И если вы решите компилировать только PasswordLockbox.java, то компилятор должен знать, где он может найти зависимый класс PasswordLockbox.LoginScreen

Таким образом, чтобы преодолеть эту проблему, вы должны использовать эту команду для компиляции всех классов:

project>javac PasswordLockbox/*.java

Обратите внимание, что в этом случае вы получите все файлы .class в том же каталоге, где хранятся файлы *.java, поэтому рекомендуется использовать параметр -d для размещения скомпилированных классов

Затем вы можете запустить вашу программу с помощью команды java, и теперь вам нужно указать classpath с помощью параметра -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

...