-1

我想学习编写自己的包,这样我就不再依赖 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.java:1: error: package projectaqua does not exist                               
import projectaqua.GameFrame; 

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

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

根据我在学校学到的知识,在编写 GUI 应用程序时,我们创建了一个类,其中包含一个 main 函数来实例化框架,这就是它的唯一工作。这将在这个结构中的什么位置?

直觉上,该文件似乎在 src 文件之外,但我觉得这消除了 src 文件的目的。我在stackoverflow上没有找到任何有用的东西,如果你有或有请指出我的方向。

更多源代码:

游戏帧类:

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();
    }

}
4

2 回答 2

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

它寻找正确的东西。

于 2013-03-06T02:23:37.507 回答
0

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

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

还要确保您的 Main.java 和 GameFrame.javapackage projectaqua;在开头都有

于 2013-03-06T02:12:46.557 回答