将我的类放入包中时,代码会中断

时间:2012-01-16 04:16:18

标签: java

我有一些工作正常的java类,直到我把它们放在一个包中(它们确实应该存在)并且我无法理解为什么。

班主任

import javax.swing.JPanel;

public class Board extends JPanel {
    public Board() {
    }

    public static void main(String[] args) {
    }
}

Class Skeleton

import javax.swing.JFrame;

public class Skeleton extends JFrame {

    public Skeleton() {
        add(new Board());
        setTitle("Skeleton");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300, 280);
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);
    }
    public static void main(String[] args) {
        new Skeleton();
    }
}

所有这一切都正常,直到我把

package skeleton;

位于每个顶部。

这样做我得到了

skeleton.java:9: error: cannot find symbol
        add(new Board());
                ^
  symbol:   class Board
  location: class Skeleton
1 error
Error: Could not find or load main class skeleton.Skeleton

它可能很简单,我忽略了但我似乎无法找出它有什么问题。

修改

这两个类都在一个名为skeleton的文件中,而且skeleton总是拼写正确。

我在Board.java和Skeleton.java上运行javac,在skeleton.Skeleton上运行java

编辑2

我修复了

skeleton.java:9: error: cannot find symbol
            add(new Board());
                    ^
      symbol:   class Board
      location: class Skeleton

错误,我忘了我将每个文件单独传递给javac,但是

Error: Could not find or load main class skeleton.Skeleton

仍然存在。

3 个答案:

答案 0 :(得分:1)

我在我的机器中重新创建了代码并且工作正常。

将它们命名为Board.java和Skeleton.java


~$ cd skeleton
~/skeleton$ ls
Board.java  Skeleton.java
~$ cd ..
~$ javac skeleton/*.java
~$ ls skeleton
Board.class  Board.java  Skeleton.class  Skeleton.java
~$ java skeleton.Skeleton

我的屏幕上的输出闪烁!!

我也是这样累了。


~$ cat arglist
skeleton/Board.java
skeleton/Skeleton.java
~$ javac @arglist
~$ java skeleton.Skeleton 

这也有效。

答案 1 :(得分:1)

我对同一类型的文件遇到了同样的问题。 但是,我成功地编译了两个文件: cd .. 并从父文件夹编译如下:

  

zetcode / *。java的

汇编成功了。但是当我试着

  

zetcode> java Snake

错误:无法找到或加载主类Snake

唯一的解决方案是最多两个文件夹,即包的根目录 并从那里发出问题

  

java com.zetcode.Snake

并且有效。

答案 2 :(得分:0)

除非您将这两个文件都传递给javac,否则它会在文件skeleton.Board中查找相对于源路径上的目录的skeleton/Board.java

您需要重新编写目录结构,以便两个文件都位于类路径中名为“skeleton”的目录中,或者将这两个文件作为参数传递给javac