This question already has answers here:
Is the current path `.` in the classpath by default?
                                
                                    (4个答案)
                                
                        
                                2年前关闭。
            
                    
我搜索了这个问题,但找不到解决方案。

我正在运行为流行的KataPokerHands挑战创建的解决方案。我有两个类别CardDeckDealer,发牌人使用纸牌。当我运行程序时,出现一条错误消息,表明JVM无法找到由Dealer类调用的CardDeck类,即使这两个类都位于同一目录中。

这是cardeck类:

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;
    }
}


这是经销商类:

    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;
    }
}


这是运行程序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);
    }
}


这是错误消息:


  线程“主”中的异常java.lang.NoClassDefFoundError:CardDeck
    在Dealer。(Dealer.java:14)在PokerGame.main(PokerGame.java:9)
  造成原因:java.lang.ClassNotFoundException:CardDeck位于
  java.net.URLClassLoader.findClass(URLClassLoader.java:382)在
  java.lang.ClassLoader.loadClass(ClassLoader.java:424)在
  sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349)在
  java.lang.ClassLoader.loadClass(ClassLoader.java:357)...还有2个

最佳答案

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

javac *.java


然后使用以下命令运行PokerGame.main()

java PokerGame

07-24 12:28
查看更多