@exoKvant

Почему не работает код?

Хотел познакомиться с java. Нашел курс udemy на трекере "Java для начинающих: с нуля до сертификата Oracle. "Столкнулся с проблемой. В уроке преподаватель сразу все делает в public классе BankAccount, повторяю, все работает. Затем он удаляет из этого класса метод main, создает новый класс BankAccountTest и оттуда ссылается к публичному классу BankAccount. Повторяю, у меня выдает ошибку. Видеокурс довольно старый. Все делаю точь в точь. Может быть проблема из разных версий ПО?
Прошу прощения, если некорректно задал вопрос.
Код
public class BankAccount {
    
    int id;
    String name; 
    double balance;
}

class BankAccountTest {

    public static void main(String[] args) {
        
        BankAccount MyAccount = new BankAccount();
        BankAccount YourAccount = new BankAccount();
        BankAccount HisAccount = new BankAccount();
        
        MyAccount.id=1; 
        MyAccount.name="Жан";
        MyAccount.balance=14.35;
        
        YourAccount.id=2; 
        YourAccount.name="Бен";
        YourAccount.balance=12.35;
        
        HisAccount.id=3; 
        HisAccount.name="Сали";
        HisAccount.balance=15.35;
        
        System.out.println(HisAccount.name);
    }
    
}

Ошибка
Error: Main method not found in class Lesson4.BankAccount, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:764)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:711)
at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:289)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:564)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 2.691 s
Finished at: 2020-08-04T16:59:56+03:00
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli) on project mavenproject1: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@Hanneman
Особенности IDE, которыми не следует пользоваться. Теоретически несколько классов в одном файле использовать возможно, и некоторые IDE сразу же позволяют использовать этот функционал. Но не следует делать так: всегда выносите классы в отдельные файлы (если не вложенные, само собой):
У автора в настройках запуска проекта явно указано, где расположен метод main. В NetBeans не работаю (но это именно аргумент, например, -classpath "ваш_путь\del\bin" del.BankAccountTest), в Eclipse выставляется так (и файл BankAccountTest.class уже есть в bin - смотрите ниже):
5f29c5af0bb6f600410196.jpeg

Как воспроизвести:

Изначально два файла, в каждом ко классу:

5f29bfbbd4c57670847569.jpeg

Компилируем, получаем в bin два файла классов BankAccount.class и BankAccountTest.class, запускаем.

5f29bfd92631a688046295.jpeg

Удаляем BankAccountTest.java, а код переносим в BankAccount.java. Компилируем, запускаем.

5f29c05405046652034667.jpeg

А теперь удалите BankAccountTest.class - и IDE не сможет сослаться на main из удаленного BankAccountTest.class, несмотря на то, что, как выше показано, код второго класса перенесли в BankAccount.java (т.е. восстановили "исходное" состояние) - IDE не воспринимает класс BankAccountTest для компиляции.

5f29c72a203e1421617831.jpeg
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@xez
Senior Junior Roo
Создайте еще один файл BankAccount и положите его рядом с BankAccountTest.
В файл BankAccount перенесите полностью ваш класс BankAccount.
Т.е. должно получиться два файла: BankAccountTest и BankAccount; внутри соответствующие классы.
Ответ написан
onepavel
@onepavel
Консультация и разработка мобильных приложений
у тебя точка входа в программу, функция main, находится в другом классе
и ошибка об этом говорит:
Error: Main method not found in class Lesson4.BankAccount, please define the main method as:

метод main надо перенести из BankAccountTest в BankAccount
Ответ написан
@azerphoenix
Здравствуйте!
Нюансы могут быть разные...
1) метод main располагается не в публичном классе
class BankAccountTest {
    public static void main(String[] args) {}
}

2)
Error: Main method not found in class Lesson4.BankAccount, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

Если это JavaFX приложение, то тут важна версия Java. Если память не изменяет, то JavaFX с версии 11 стала отдельной модулью и ее нужно дополнительно подключать.
3) Если вы работаете в IDEA и при создании выбираете Create jar with dependencies, то в некоторых версиях она срабатывает некорректно и не создает манифестный файл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
XCritical Software Санкт-Петербург
До 370 000 ₽
Ланит-Терком Санкт-Петербург
от 90 000 до 130 000 ₽
18 сент. 2020, в 21:23
2500 руб./за проект
18 сент. 2020, в 20:16
13000 руб./за проект
18 сент. 2020, в 19:05
25000 руб./за проект