为什么我不能用 Java 编译我的打包类?

时间:2021-01-02 14:21:12

标签: java compilation

我正在做我的程序。 我正在使用 Sublime Text 并用于编译基本的 Windows CMD。 我有文件夹,其中包含每个文件 (folde todolist) 在这个文件夹中我有包。在这个包中,我有类 (Gui.java(packgae (folder) gui_pckg))。此类中的代码如下所示:

package  gui_pckg;

导入 javax.swing.; 导入 java.awt.;

公共类 Gui {

public JFrame frame = new JFrame("To Do List");


public Gui() {
    frame.setSize(500, 800);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

}

而且编译得很好。

但是,当我尝试编译 Main.java 时,它会引发错误。 Main.java 中的代码:

import gui_pckg.Gui;

公共类 Main {

public static void main(String[] args) {
    Gui gui = new Gui();
}

}

为了编译,我在 cmd 中输入了基本的编译命令。

Commands in cmd

请帮忙。

1 个答案:

答案 0 :(得分:1)

使用 IDE。当您拥有复杂的包装结构时,尝试在命令行上进行编译很快就会变得太麻烦而无法获得回报。

如果没有 IDE,您可以期望为您移动的文件调整所有包,并在重命名包时调整包文件的所有包名称。更不用说,即使你制作了一个 bash 脚本来编译你的 java 程序,这也需要手动调整每个新文件。 TLDR:只需使用 IDE。

如果你绝对坚持不带一个(根本不推荐)继续,为了避免复杂性,你所有的java类应该在同一个包(目录)中,也就是没有打包。 Java 在同一个目录中看到所有类。您无需打包即可导入。

当你开始这样的结构时:

|-bin
|-src
   |-util
   |   |-Util.java
   |-Main.java

然后您需要开始打包,因为并非所有文件都存在于同一目录中。避免这种情况,否则您必须手动设置类路径、二进制文件和源文件夹。

在 bash 中,这类似于:

cd src; javac -cp ".:util" -d "../bin" ./Main.java ./util/Util.java

然后要运行,您将拥有以下内容:

java Main

到 src 的 cd 实际上非常重要,因为如果您不在顶级根目录中进行编译,那么这些包对 javac 将没有意义。