프로젝트가 Gradle로 빌드 된 경우 이미지 제품 nullpointer-Java

ak1652

TL; DR은 하단을 참조하십시오.

안녕, 그래서 나는 이것이 할 아주 기본적인 일이라고 생각했지만 그것은 나에게 두통을 준다 :(

일부 이미지로 JavaFX 응용 프로그램을 작성하고 있습니다. 프로젝트를 빌드하기 위해 gradle을 사용하고 있습니다. 내 구조는 다음과 같습니다.

src
- main
-- java
--- view
---- sections
----- WelcomeSection.java
-- resources
--- logo.png

- tests
--java
--resources

Gradle 패키지 구조를 따라 가면 WelcomeSection.java에 다음 코드 스 니펫이 있습니다 (JavaFX 애플리케이션임을 기억하십시오).

Image logo = new Image(getClass().getResourceAsStream("../../../resources/logo.png"));
ImageView logoImageView = new ImageView(logo);

... 내가 Eclipse로 컴파일하고 실행할 때 아름답게 작동합니다.

gradle을 통해 빌드를 실행하려고하면 jar 파일이 생성됩니다. jar 파일을 실행하면 다음 런타임 예외가 발생합니다.

Exception in Application start method
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Input stream must not be null
        at javafx.scene.image.Image.validateInputStream(Unknown Source)
        at javafx.scene.image.Image.<init>(Unknown Source)
        at main.java.view.sections.WelcomeSection.logoLabel(WelcomeSection.java:83)
        at main.java.view.sections.WelcomeSection.setupTopBar(WelcomeSection.java:73)
        at main.java.view.sections.WelcomeSection.setup(WelcomeSection.java:61)
        at main.java.view.sections.WelcomeSection.<init>(WelcomeSection.java:52)
        at main.java.view.MainView.setupWelcomeSection(MainView.java:27)
        at main.java.view.MainView.setup(MainView.java:37)
        at main.java.view.MainView.<init>(MainView.java:23)
        at main.java.Main.start(Main.java:26)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
        ... 1 more

... 이미지 경로와 분명히 관련이 있습니다. 이미지를 제거하면 gradle로 빌드 할 때 제대로 작동합니다.

요약 : Javafx 애플리케이션 내에서 이미지를 올바르게 참조하여 Eclipse 와 gradle로 빌드 할 때 더 중요 하게 작동하도록 어떻게해야 합니까? src / main / resources / logo.png에 대한 Java 코드에서 경로를 변경하려고 시도했지만 여전히 gradle에서 작동하지 않으며 Eclipse에서 실행할 때도 작동하지 않습니다.

니콜라스 필로 토

파일이 바로 아래 에 있으면 클래스 경로 src/main/resources루트 수준있음을 의미 하므로 getClass().getResourceAsStream("/logo.png")다음과 같아야합니다 .

Image logo = new Image(getClass().getResourceAsStream("/logo.png"));
ImageView logoImageView = new ImageView(logo);

그러나 Image(String url)의 형식에 따른 생성자 url는 컨텍스트에서 이미지를 가져 오려고 시도 할 수 ClassLoader있으므로 다음과 같이 간단히 동일한 결과를 얻을 수 있습니다.

Image logo = new Image("/logo.png");
ImageView logoImageView = new ImageView(logo);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

프로젝트가 OpenMP로 빌드 된 경우 어떤 차이가 발생할 수 있습니까

분류에서Dev

이미지가 이미로드 된 경우 jQuery .load () 대체

분류에서Dev

xcode-Cordova 프로젝트 잘못된 이미지 경로 문제

분류에서Dev

제품 이미지가 프런트 엔드 및 백엔드의 다른 경로에서 제공됩니다.

분류에서Dev

VisualStudio는 변경된 참조 프로젝트를 빌드하지 않습니다.

분류에서Dev

몇 가지 변경된 필드 MVC 3 프로젝트 업데이트

분류에서Dev

NuGet이 프로젝트 .Net 버전에 빌드 된 패키지를 다운로드하도록 강제

분류에서Dev

IntelliJ IDEA로 Gradle 빌드의 Java 패키지 이름 문제

분류에서Dev

방법 : 포함 된 어셈블리에서 가져온 경우 프로젝트에서 이미지 사용

분류에서Dev

Code Repository가 업데이트 된 경우에만 Docker 이미지 빌드 (Jenkins)

분류에서Dev

프로젝트가 빌드 된 후 Expo 알림이 작동합니까?

분류에서Dev

가능한 가장 간단한 프로젝트에 대해 생성 된 Eclipse CDT 빌드가 포함 경로를 올바르게 설정하지 않음

분류에서Dev

이름이 지정된 경로에 대한 경로 도우미 문제

분류에서Dev

헤더가 이미로드 된 경우 Google지도가로드됩니다.

분류에서Dev

Maven Java 프로젝트가 빌드되지만 실행되지 않습니다.

분류에서Dev

Ant를 사용하여 git에서 복제 된 Java 프로젝트 빌드 실패

분류에서Dev

온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

분류에서Dev

온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

분류에서Dev

Android Studio 2.2.2로 Google지도 예제 프로젝트 빌드

분류에서Dev

Android Studio에서 SDK 경로를 변경 한 후 이전 프로젝트가 빌드되지 않음

분류에서Dev

자바 11. 잘못된 유형 코드 5.1.1 프로젝트를 Gradle을 위해 업데이트 한 후 프로젝트를 빌드 할 수 없습니다

분류에서Dev

이미지가 완전히로드 된 경우 C # 시작 양식

분류에서Dev

xamarin droid 프로젝트가 x64 java jdk로 이동 한 후 빌드되지 않음

분류에서Dev

Eclipse없이 Eclipse Java 프로젝트 빌드

분류에서Dev

jar가 이미 프로젝트에 포함 된 경우 maven 종속성을 정의하는 방법

분류에서Dev

Maven : 어린이 프로젝트의 Docker 이미지 빌드

분류에서Dev

프로젝트 B가 빌드 중일 때 프로젝트 A의 다음 예정된 빌드 취소

분류에서Dev

개별적으로 표시되지 않음으로 설정된 경우 제품이 계속 표시됨

분류에서Dev

사이트 프로젝트 파일이 서버에 업로드 될 때 일반적으로 .gitignore에 추가 된 경우 프로젝트의 노드 모듈은 어떻게 작동합니까?

Related 관련 기사

  1. 1

    프로젝트가 OpenMP로 빌드 된 경우 어떤 차이가 발생할 수 있습니까

  2. 2

    이미지가 이미로드 된 경우 jQuery .load () 대체

  3. 3

    xcode-Cordova 프로젝트 잘못된 이미지 경로 문제

  4. 4

    제품 이미지가 프런트 엔드 및 백엔드의 다른 경로에서 제공됩니다.

  5. 5

    VisualStudio는 변경된 참조 프로젝트를 빌드하지 않습니다.

  6. 6

    몇 가지 변경된 필드 MVC 3 프로젝트 업데이트

  7. 7

    NuGet이 프로젝트 .Net 버전에 빌드 된 패키지를 다운로드하도록 강제

  8. 8

    IntelliJ IDEA로 Gradle 빌드의 Java 패키지 이름 문제

  9. 9

    방법 : 포함 된 어셈블리에서 가져온 경우 프로젝트에서 이미지 사용

  10. 10

    Code Repository가 업데이트 된 경우에만 Docker 이미지 빌드 (Jenkins)

  11. 11

    프로젝트가 빌드 된 후 Expo 알림이 작동합니까?

  12. 12

    가능한 가장 간단한 프로젝트에 대해 생성 된 Eclipse CDT 빌드가 포함 경로를 올바르게 설정하지 않음

  13. 13

    이름이 지정된 경로에 대한 경로 도우미 문제

  14. 14

    헤더가 이미로드 된 경우 Google지도가로드됩니다.

  15. 15

    Maven Java 프로젝트가 빌드되지만 실행되지 않습니다.

  16. 16

    Ant를 사용하여 git에서 복제 된 Java 프로젝트 빌드 실패

  17. 17

    온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

  18. 18

    온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

  19. 19

    Android Studio 2.2.2로 Google지도 예제 프로젝트 빌드

  20. 20

    Android Studio에서 SDK 경로를 변경 한 후 이전 프로젝트가 빌드되지 않음

  21. 21

    자바 11. 잘못된 유형 코드 5.1.1 프로젝트를 Gradle을 위해 업데이트 한 후 프로젝트를 빌드 할 수 없습니다

  22. 22

    이미지가 완전히로드 된 경우 C # 시작 양식

  23. 23

    xamarin droid 프로젝트가 x64 java jdk로 이동 한 후 빌드되지 않음

  24. 24

    Eclipse없이 Eclipse Java 프로젝트 빌드

  25. 25

    jar가 이미 프로젝트에 포함 된 경우 maven 종속성을 정의하는 방법

  26. 26

    Maven : 어린이 프로젝트의 Docker 이미지 빌드

  27. 27

    프로젝트 B가 빌드 중일 때 프로젝트 A의 다음 예정된 빌드 취소

  28. 28

    개별적으로 표시되지 않음으로 설정된 경우 제품이 계속 표시됨

  29. 29

    사이트 프로젝트 파일이 서버에 업로드 될 때 일반적으로 .gitignore에 추가 된 경우 프로젝트의 노드 모듈은 어떻게 작동합니까?

뜨겁다태그

보관