首页 > 解决方案 > Why I can not compile my packaged class in Java?

问题描述

I'm doing my program. I'm using Sublime Text and for compiling basic Windows CMD. I have folder, where I have every file (folde todolist) In this folder I have package. In this package I have class (Gui.java(packgae (folder) gui_pckg)). Code in this class looks like:

package  gui_pckg;

import javax.swing.; import java.awt.;

public class Gui {

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


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

}

And it's compiled well.

But, when I'm trying to compile Main.java, it throws errors. Code in Main.java:

import gui_pckg.Gui;

public class Main {

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

}

For compiling I'm typing basic compile command into cmd.

Commands in cmd

Please help.

标签: javacompilation

解决方案


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

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

如果您绝对坚持不使用一个(根本不推荐)继续,为避免复杂性,您所有的 java 类都应该在同一个包(目录)中,AKA,没有打包。Java 在同一个目录中看到所有类。您可以在不打包的情况下导入它们。

当你开始这样的结构时:

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

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

在 bash 中,这类似于:

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

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

java Main

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


推荐阅读