我是一个初学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);
}
}
Game.java
javac chess/game/Pieces.java
javac -cp . game/Board.java
javac -cp . Game.java