多级包 - Java

问题描述 投票:0回答:2

我是一个初学java的新手,我是第一次使用包,我想把包做成这样的层次结构。

chessgamePieces.class

chessBoard.class导入Pieces

Game.java导入Board

我只用 javac filename.java 来获取类文件。

Game.java没有使用Pieces.class的任何方法和变量,所有的Classes,Functions和Variables都是公共的。我用main测试了board.java,它工作得很好,但是当我把它作为一个包来使用时,它就不能工作了,我得到了 "类未找到"。

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中导入这两个类,因为我在Pieces.class中做了一个/pack game;,所以我不能在Game.java中把它导入为/ import chess.game.Pieces;。

如果这样做是非法的.是否有其他的OOP方法?

EDIT-我使用的代码-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

游戏.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); 
}
}
java package noclassdeffounderror
2个回答
0
投票
  1. 进入包含文件的目录 Game.java
  2. 输入这个命令 javac chess/game/Pieces.java
  3. 然后,输入这个命令 javac -cp . game/Board.java
  4. 然后,输入这个命令 javac -cp . Game.java
© www.soinside.com 2019 - 2024. All rights reserved.