Ошибка: Main.class найден в каталоге верхнего уровня (безымянный пакет не разрешен в модуле)

Пытаясь обновить приложение до Java 11, и после того, как я разобрался с модулями, я подумал, что избавился от всех красных ошибок, и теперь получаю ту, которую никогда раньше не видел:

введите здесь описание изображения

Оглядываясь вокруг, я видел, как люди предполагают, что это можно сделать со структурой приложения:

введите здесь описание изображения

или файл module-info.java:

введите здесь описание изображения

Кто-нибудь знает, что мне нужно сделать, чтобы избавиться от этого?

Изменить: ошибка после перемещения Main.java в пакет с именем main и попытки его запустить:

введите здесь описание изображения


person AlwaysNeedingHelp    schedule 23.09.2018    source источник
comment
Ваш основной класс отсутствует в каком-либо пакете (или, если быть точным, он использует безымянный пакет), и это не разрешено в модульном приложении. Добавьте объявление пакета в Main.java (например, package main;).   -  person Guest 21    schedule 23.09.2018
comment
@ Guest21 Я получаю сообщение об ошибке Основной пакет не соответствует пути к файлу   -  person AlwaysNeedingHelp    schedule 23.09.2018
comment
IDE должна предложить вам переместить файл - наведите курсор мыши на имя пакета, нажмите Alt + Enter и нажмите Переместить в основной пакет. Или переместите файл вручную - сделайте новый пакет основным и переместите в него файл.   -  person Guest 21    schedule 23.09.2018
comment
@ Guest21, спасибо, я создал новый пакет под названием main и переместил его, я получил новую ошибку, которая снова меня смутила, не могли бы вы взглянуть? Ставлю в ОП.   -  person AlwaysNeedingHelp    schedule 23.09.2018


Ответы (2)


Чтобы JavaFx запускал ваше приложение, ему необходим доступ к своему основному классу, поэтому вам нужно экспортировать пакет, в котором находится основной класс.

Добавьте экспортную декларацию в информацию о модуле:

module Game.main {
    ...

    exports main;
}
person Guest 21    schedule 23.09.2018

Если вы перемещаете класс в другую папку, перед строкой объявления класса вам необходимо иметь ссылку на папку, в которой находится / должен находиться этот класс, - сообщая системе, где искать. Например:

//This line below is important
package main.java.main.Main;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
    }
}
person NL23codes    schedule 02.12.2019