No IntelliJ, essa é minha estrutura de diretórios. Todavia, enquanto o FXML é identificado perfeitamente, a imagem não. Por que isso ocorre? É o jeito que estou pegando a imagem?
Exception:
Exception in Application start method
Exception in thread “main” java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1118)
at javafx.scene.image.Image.(Image.java:620)
at br.com.fearchannel.complexcalc.Calculadora.start(Calculadora.java:18)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
… 1 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1110)
… 11 more
Acredito que falta vc configurar o Working Directory. Por padrão ele aponta pro root do projeto e é a partir dali que ele busca o arquivo.
Na barra de menu, vai em Run e clica em Run… e depois em Edit configuration. Na tela de configuração vai ter a opção Working directory. Ali vc coloca o lugar onde estão suas imagens (src/main.java/resources…).
Interessante. Creio que não seja sobre isso, ainda. Veja bem, dentro de resources (onde o intellij aconselha que todo recurso seja mantido), ele captura a pasta fxmls e (aparentemente) não a imgs. Creio que o working directory estar na raiz do projeto é o correto.
Estranho, de fato. Utilizo dessa mesma forma (e praticamente com a mesma estrutura de diretórios!) em outro projeto, e funciona perfeitamente. Daí, concluí que a falha não estaria no código (que deveria funcionar normalmente), e sim em algum detalhe do IntelliJ. Mas como ele consegue pegar o FXML, estranhei.
Creio que isso sirva para o Swing (no pacote awt), mas não funciona com JavaFX. Mas obrigado pela sugestão, vou tentar outros meios para isso.
Tentei também tirar a barra, usar “file:name.png”. Sem resultados. Engraçado que a própria IDE reconhece e linka o arquivo (segurando ctrl + clicando ele abre a imagem), mas o software não. De outras formas, a IDE não linka.