多级包 - Java

Multilevel package - Java

我只是 java 的新手,而且我是第一次使用包。 我正在尝试在此层次结构中制作包:

/chess/game/Pieces.class

/chess/Board.class imports Pieces

/Game.java imports Board

我只使用 javac filename.java 编译得到 class 个文件。

Game.java 没有使用 Pieces.class 的任何方法和变量只是为了确定。 所有 类、函数和变量都是 public。 我用 main 测试了 board.java 并且它完美地工作 fine.But 当我将它用作一个包时它不起作用并且我找不到 class 。

Exception in thread "main" java.lang.NoClassDefFoundError: game/Pieces
        at chess.Board.initializeboard(Board.java:31)
        at Game.main(Game.java:14)
Caused by: java.lang.ClassNotFoundException: game.Pieces
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at chess.Board.initializeboard(Board.java:31)
        at Game.main(Game.java:14)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.execute(Main.java:415)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.run(Main.java:192)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.main(Main.java:132)

我无法在 Game.java 中导入两个 classes,因为我制作了一个 // 打包游戏;在 Pieces.class 所以我不能将其导入为 // import chess.game.Pieces;在 Game.java 中。

如果这是 illegal.Is 还有其他 OOP 方法吗?

编辑- 我使用的代码- Pieces.java -(将其编译为 .class 文件)

package game;

import javax.swing.JButton;

public class  Pieces{
public enum Type {ROOKE,KNIGHT,BISHOP,KING,QUEEN,PAWN};

public boolean alive = true;
public boolean white = false;
public boolean firstmove = false;
public int mx;
public int my;
public Type types;

public JButton button=new JButton();
public void setButton(JButton b){
                        this.button=b;}  

}

Board.java -(将其编译为 .class 文件)

package chess;

import game.*;

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.*;

public class Board{

public void initializeboard(JButton [][] spots){
JFrame f = new JFrame("CHESS");
f.setVisible(true);
f.setSize(800,800);

GridLayout layout =new GridLayout(8,8,1,1);
f.setLayout(layout);

for(int ver=0;ver<8;ver++){
  for(int hor=0;hor<8;hor++){
      JButton button = new JButton();
      if((ver+hor)%2==0){
                    button.setBackground(Color.WHITE); }
      else{
           button.setBackground(new Color(255,205,51)); }
 Pieces p =new Pieces();
 spots[ver][hor] = button;
 p.setButton(button);
 f.add(button);
 } //close for loop
 } // close for loop
 f.revalidate();
 } //  close initializeboard
 }// close board

Game.java -

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.*;

import chess.Board;
public class Game{
public static void main(String [] args){

JButton [][] spots =new  JButton [8][8];

Board b =new Board();
b.initializeboard(spots); 
}
}
  1. 转到包含文件的目录 Game.java
  2. 输入此命令
    javac chess/game/Pieces.java
  3. 之后,输入此命令
    javac -cp . game/Board.java
  4. 之后,输入此命令
    javac -cp . Game.java