无法运行我自己的Java包

时间:2013-03-06 02:06:58

标签: java packages

我想学习编写自己的软件包,所以我也不会对IDE感兴趣,我觉得我已经成为了IDE。问题是我无法弄清楚如何运行我自己的包,或者正确的方法是运行自己的包。

这是我用来学习一些基础知识的资源:http://javaworkshop.sourceforge.net/chapter3.html

这是我目前的文件结构:

Main.java
/src
 projectaqua/
  GameFrame.java
/classes
 projectaqua/
  GameFrame.class

我在项目的根目录中运行了命令:javac -d ./classes/ ./src/projectaqua/*.java

我最初在/ src / projectaqua目录中创建了一个Main文件,并尝试运行该文件。我收到了这个错误:

Main.java:1: error: package projectaqua does not exist                               
import projectaqua.GameFrame; 

我在使用包编译Main文件时尝试在/ classes / projectaqua目录中运行应用程序,这给了我一个未定义错误的类。

这编译了我的包,我遇到的问题是我不明白你应该如何导入自己的包来运行它,以及运行包的文件在哪里?

从我在学校学到的知识,在编写GUI应用程序时,我们创建了一个具有main函数的类来实例化框架,这是唯一的工作。这个结构在哪里?

直观地看起来文件将在src文件之外,但我觉得这样就删除了src文件的用途。我没有在stackoverflow上找到任何有用的东西,如果你这样或者请指点我这个方向。

更多源代码:

GameFrame类:

package projectaqua;

import javax.swing.JFrame;

public class GameFrame extends JFrame
{

    private int WINDOW_HEIGHT = 500;
    private int WINDOW_WIDTH = 500;
    private String title = "Project Aqua";
    private boolean isVisible = true;

    public GameFrame()
    {

        // Basic Window Defaults
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setTitle(this.title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Content Pane junk
        // Will be added

        setVisible(this.isVisible);

    }

}

主要课程

import projectaqua.GameFrame;

public class Main
{

    public static void main(String[] args)
    {
        GameFrame launch = new GameFrame();
    }

}

2 个答案:

答案 0 :(得分:2)

我现在看到你的问题了。

在你的问题中,你不清楚你在运行v。编译时遇到了麻烦。如果你发布了这个错误跟踪,我会立即清楚你的问题是什么:

 unrollme-dev-dan:projectaqua Dan$ java Main
 Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: projectaqua/Main)

另请注意,如果你用Google搜索NoClassDefFoundError就会发现这一点。这里的道德是:理​​解并研究你的确切错误。

反正

unrollme-dev-dan:classes java projectaqua/Main

是你想要的。注意目录的更改。我从不打扰理解为什么,与包层次结构和文件结构层次结构之间的关系有关。

Java在设计时有两个选择:假设您正在谈论的事情是在全局包中(哎呀!)或尝试猜测它所在的包。它将工作目录下的任何文件夹视为包。因此,即使它在运行它的目录中找到了Main类,也没有在对应于目录Main的名称空间中找到.类,即全局类。

当您从一个目录运行并告诉它在projectaqua/中运行时,它现在正在查找以projectaqua开头的类。

或者,如果你运行

unrollme-dev-dan:projectaqua java projectaqua.Main

它寻找合适的东西。

答案 1 :(得分:0)

在项目的根目录下尝试此命令

javac -cp ./classes -d ./classes ./src/projectaqua/*.java

同时确保您的Main.java和GameFrame.java在开头都有package projectaqua;