Java ClassNotFoundException

Java ClassNotFoundException

我搜索了这个问题,但找不到解决方案。

我正在 运行我为流行的 KataPokerHands 挑战创建的解决方案。我有两个 classes CardDeckDealer,庄家使用一副牌。当我 运行 程序时,我收到一条错误消息,指出 JVM 无法找到经销商 class 正在调用的 CardDeck class,即使两者 classes 存在于同一目录中。

这是卡片组 class:

import java.util.ArrayList;
import java.util.Arrays;

public class CardDeck 
{
    private final ArrayList<String> deck;

    CardDeck() 
    {
        deck = new ArrayList<>();      
        for(int i = 2; i < 10; i++)
        {
            deck.add(i + "H");
            deck.add(i + "D");
            deck.add(i + "S");
            deck.add(i + "C");
        }

        deck.addAll(Arrays.asList("TH TD TS TC JH JD JS JC QH QD QS QC KH KD KS KC AH AD AS AC".split(" ")));
    }
    ArrayList<String> getDeck()
    {
        return deck;
    }
}

这是经销商class:

    import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class Dealer 
{
    int deckSize;
    ArrayList<String> newDeck;
    Random rand;

    Dealer() 
    {
        deckSize = 52;
        newDeck = new CardDeck().getDeck();
        Collections.shuffle(newDeck);
        rand = new Random(42);
    }

    ArrayList dealHand() 
    {
        ArrayList<String> myHand = new ArrayList<>();
        int cardIndex;
        for(int i = 0; i < 5; i++, deckSize--) 
        {
            cardIndex = rand.nextInt(deckSize);
            myHand.add(newDeck.get(cardIndex));
            newDeck.remove(cardIndex);// remove the card picked from the deck
        }
        return myHand;
    }
}

这是运行程序的class,Pokergame.java:

import java.util.*;

public class PokerGame 
{

    public static void main(String[] args) 
    {

        Dealer dealer = new Dealer();

        ArrayList<String> PlayerOneHand = dealer.dealHand();
        ArrayList<String> PlayerTwoHand = dealer.dealHand();

        System.out.println("Player One's cards: " + PlayerOneHand);
        System.out.println("Player Two's cards: " + PlayerTwoHand);
        System.out.println();

        CompareHands hands = new CompareHands(PlayerOneHand, PlayerTwoHand);
        hands.compareHands(PlayerOneHand, PlayerTwoHand);
    }
}

这是错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: CardDeck at Dealer.(Dealer.java:14) at PokerGame.main(PokerGame.java:9) Caused by: java.lang.ClassNotFoundException: CardDeck at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 2 more

很可能您没有编译 CardDeck class,因此它不在 java 运行time class 路径中。假设您使用 javac 命令手动执行此操作,您可以使用以下命令重新编译当前目录中的所有源文件:

javac *.java

然后 运行 PokerGame.main() 与:

java PokerGame

错误告诉我们java运行时在运行时找不到CardDeck.class文件。确保它存在(编译所有三个 java 文件)并且所有三个 class 文件都在同一目录中。

并注意文件名与 class 名称完全匹配,即:您需要文件 CardDeck.javaDealer.javaPokerGame.java.