[RESOLVIDO] Estrutura dos diretórios incorreta?

8 respostas Resolvido
javaintellij
F

Olá a todos.

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

8 Respostas

W

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…).

F

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.

[]'s

J

Estranho esse erro!

Eu sempre utilizei de forma diferente, veja se funciona pra você!

URL url = this.getClass().getClassLoader().getResource("imgs/icon.png");
Image image = Toolkit.getDefaultToolkit().getImage(url);
primaryStage.getIcons().add(image);
F

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.

[]'s

M

Tenta um @ antes da url

"@/imgs/icon.png"
F

Nem assim, @Mike. Impossível isso! rs.

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.

[]'s

M
Solucao aceita

Vish, tenta dessas duas formas:

Image image = new Image(getClass().getResource("/imgs/icon.png").toExternalForm());

Image image = new Image(getClass().getResource("/imgs/icon.png"));
F

Maravilhosa resposta, Mike. A primeira forma resolveu. Acho que é o getResource() que faltava.

Criado 13 de março de 2019
Ultima resposta 13 de mar. de 2019
Respostas 8
Participantes 4