Использование Java-класса из одного пакета в основном из другого пакета (тот же проект) - PullRequest
0 голосов
/ 25 января 2019

У меня есть два пакета внутри проекта, над которым я работаю в Java, и мне нужно вызывать класс из одного пакета, когда я запускаю основную часть класса в другом пакете.

У меня есть что-то, чтовыглядит следующим образом:

Project JavaCode
    /src
        /fr.insalyon.tc.framework
            Main.java
            Gameplay.java
        /Game
            Wythoff.java

, и проблема в том, что в файле Wythoff.java я вызываю import fr.insalyon.tc.framework.Gameplay;, но я получаю сообщение об ошибке, когда запускаю Main.java, который говорит, что не может найти класс Wthoff.

Main.java и Gameplay.java имеют в качестве первой строки package fr.insalyon.tc.framework;, Gameplay - это интерфейс, а Wythoff реализует Gameplay, чтобы играть в игру.Что делает main, так это:

BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
nomClasse = in.readLine();
Class<?> votreClasse = Class.forName(nomClasse);  
JeuCombinatoire jeu = (JeuCombinatoire) votreClasse.newInstance();

, и когда я запускаю Main, и мне предлагается ввести имя класса, ввод Wythoff дает мне ClassNotFoundException

Я не знаю, какизмените проект или пакеты, чтобы это работало вместе, сохраняя текущие пакеты такими, какие они есть, я не хочу, чтобы в пакете по умолчанию был файл Wythoff.java, он должен быть в / Game

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Class.forName (nomClasse);требует полностью квалифицированного пути имени класса.Пожалуйста, измените его nomClasse на (packgname.classname) и Improt Apppriat пакеты.

ПРИМЕЧАНИЕ: - Для получения дополнительной информации прочитайте Ссылку на документацию Java: - https://docs.oracle.com/javase/8/docs/api/

0 голосов
/ 25 января 2019

Вам нужно набрать либо fr.insalyon.tc.framework.Game.Wythoff, что является полным именем.в качестве альтернативы в вашем случае вы также можете набрать Game.Wythoff, потому что класс, который содержит метод main, находится в непосредственном родительском пакете.И обратите внимание, что обычно имя пакета начинается с простой буквы, например game, а не Game.

0 голосов
/ 25 января 2019

Class.forName(nomClasse); требуется полное имя класса, как указано в документах .

Итак, вы должны ввести Game.Wythoff

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...