Я искал этот вопрос и не нашел решения.
Я использую решение, созданное мной для популярной задачи KataPokerHands. У меня два класса CardDeck и Dealer, дилер использует колоду карт. Когда я запускаю программу, я получаю сообщение об ошибке, в котором говорится, что JVM не может найти класс CardDeck, который вызывается классом Dealer, даже если оба класса существуют в одном каталоге.
это класс 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);
}
}
И вот сообщение об ошибке:
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
Java потребуется путь к классам для поиска классов. Вы пробовали передать аргумент -cp команде java?
Вы можете разместить свой код? Как запустить классы, в которых IDE?
Нет, я не включал импорт, я не добавлял эти классы в пакет, я думал, что программа будет работать, поскольку все классы находятся в одном каталоге.
Я запускаю классы через командную строку, я написал код возвышенным текстом
Было бы полезно, если бы вы добавили код и журнал ошибок в свой вопрос. Я не могу понять проблему, не видя ее.
Я добавил код
Добавлю журнал ошибок
Можете ли вы также добавить PokerGame.java?
Хорошо, я добавил PokerGame.java




Скорее всего, вы не скомпилировали класс CardDeck, поэтому его нет в пути к классам среды выполнения java. Предполагая, что вы делаете это вручную с помощью команды javac, вы можете перекомпилировать все исходные файлы в текущем каталоге с помощью:
javac *.java
А затем запустите PokerGame.main() с:
java PokerGame
Это сработало! Спасибо.
@DalanMiller попробуй изучить инструмент сборки, такой как Maven или Gradle, он делает жизнь намного проще.
Ошибка сообщает нам, что среда выполнения java не может найти файл CardDeck.class во время выполнения. Убедитесь, что он существует (скомпилируйте все три файла java) и что все три файла class находятся в одном каталоге.
И следите за тем, чтобы имена файлов в точности совпадали с именами классов, а именно: вам нужны файлы CardDeck.java, Dealer.java и PokerGame.java.
Вы добавляли импорт?