exception in application start method

I am just starting out with JavaFX, and I am trying to build a simple application with a label, text field and button which, when clicked, sets the label’s value to that of the text field’s. Everything was going well until I connected the controller to the Main file. Here’s my code:

I have tried multiple answers found on StackOverflow, but all that I have found were from 2 years ago and did not make any positive effect on my code.

Ошибка:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: javafx.fxml.LoadException: No controller specified.
/C:/Users/%d0%98%d0%b2%d0%b0%d0%bd%20%d0%94%d0%bc%d0%b8%d1%82%d1%80%d0%b8%d0%b5%d0%b2%d0%b8%d1%87/IdeaProjects/Atom%20Platform/out/production/Atom%20Platform/sample/sample.fxml:10

at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2621)
at javafx.fxml/javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:105)
at javafx.fxml/javafx.fxml.FXMLLoader$Element.getControllerMethodHandle(FXMLLoader.java:565)
at javafx.fxml/javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:607)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:778)
at javafx.fxml/javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2838)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2557)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3253)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3210)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3129)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3122)
at sample.Main.start(Main.java:13)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
. 1 more
Exception running application sample.Main

Process finished with exit code 1

У меня просто кнопка не видит btn_click
Я в java новичок поэтому не знаю как её решить

November 2018

53 time

I would like to say that I have looked a lot in the SO and none of the posts helped me, so I am asking again.

I’m trying to make a login screen, but I still get the same exception. My directory structure looks like this: check here

My code looks like this:

This is the exception I get:

Everything I’ve read so far has said «That’s why FXML can not find the controller!», So I checked and it’s really all right. Here is the controler statement:

I think this information can be requested:

  • Java version: 8 (Oracle)
  • IDE: IntelliJ Community

GUI made in GluonHQ SceneBuilder.

2 answers

Существует несколько способов сделать это. Я предпочитаю метод 1, так как он кажется более простым для меня.

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

Например, если у меня есть в иерархии java/hypnic/jerk/controllers/ с MainController.java файлом в нем, и я хочу , чтобы загрузить файл FXML , который будет использовать этот файл Java в качестве контроллера, я положил его в resources/hypnic/jerk/controllers/ . Потом, когда я называю FXMLLoader.load(); я это делаю так:

Из того, что я понимаю и как я это вижу, это говорит загрузчику использовать путь изложенного MainController и захватить mainScreen.fxml файл с пути туда.

Это, на мой взгляд, самый простой способ сделать это , так как она заставляет вас продолжать именования и вы знаете , где каждый FXML файл для соответствующего файла контроллера.

Вы можете также использовать Pathing , чтобы найти его, в вашем случае, ваш loginScene.fxml находится в fxml/ папке, поэтому от Main меня бы

В ../ средства, поднимитесь один каталог / папку. Поэтому в зависимости от того, как может элементы , которые вы затемнены, помните , каждый . представляет собой новую папку в том , что имя, вам нужно, чтобы добавить , ../ пока вы вернулись к java папке.

Позволяет использовать ваш пример с путем java/br/com/one/two/three/main/ . Так как код говорят getClass().getResource(«fxml/loginScene.fxml») вы ищете для этого файла в resources/br/com/one/two/three/fxml/ папке. Путь базируется класса вызова Main.java , поэтому он не может найти его , потому что путь в resources не существует.

Таким образом , вы должны вернуться из этих директорий, используя ../ пока вы не получите его. каждый ../ представляет собой еще один ярус вверх. Таким образом , в этом случае, если я сделал свою математику правильно, вам потребуется 5 ../ для того , чтобы найти fxml/loginScene.fxml файл. Таким образом, конечный результат будет

Теперь помните, что это просто объяснение, и вам придется адаптировать его по своему усмотрению.

Источник: computermaker.info

Техника и Гаджеты
Добавить комментарий