Java ClassNotFoundException
Java ClassNotFoundException
我搜索了这个问题,但找不到解决方案。
我正在 运行我为流行的 KataPokerHands 挑战创建的解决方案。我有两个 classes CardDeck
和 Dealer
,庄家使用一副牌。当我 运行 程序时,我收到一条错误消息,指出 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.java
、Dealer.java
和 PokerGame.java
.
我搜索了这个问题,但找不到解决方案。
我正在 运行我为流行的 KataPokerHands 挑战创建的解决方案。我有两个 classes CardDeck
和 Dealer
,庄家使用一副牌。当我 运行 程序时,我收到一条错误消息,指出 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.java
、Dealer.java
和 PokerGame.java
.