Why does my Jar not start if I do not extract files?

Each time I run the exported file .jarcontaining JFramethe image as an icon, the file does not start unless I extract the file . It works in the compiler. I do not want to create a launcher that saves both the resource package and the jar file in the directory.

0
source share
1 answer

"Why does my Jar not start if I do not extract the files?"

This seems to be usage behavior Filefor your resources. Take for example

File file = new File("resources/image.png");
Image image = ImagIO.read(file);

( , resources src, - -. , resources )

C:\
   Project
        resources\image.png

:

  • IDE - ! ? File . , " ", IDE . , "resources/image.png" ProjectRoot

  • , , dist . ,

    ProjectRoot
             dist
                ProjectRoot.jar
    

    , ( ), URL- , , , URL-

    URL url = Test.class.getResource("/resources/image.png");
    System.out.println(url.toString());
    

    C:\ProjectRoot\dist> java -jar ProjectRoot.jar C:\ProjectRoot\dist\ProjectRoot.jar!\resources\image.png. , , - , jar ProjectRoot.jar!.

  • , . , ,

    C:\ProjectRoot
               dist
                   resources/image.png // from extracted jar
                   ProjectRoot.jar
    

    C:\ProjectRoot\dist >, resource .

.

, , URL-, . URL- , , . :

  • URL url = getClass().getResource("/resources/image.png");
    

    /. , dir. URL , ImageIcon(URL) `ImageI.read(URL)

  • :

    InputStream is = getClass().getResourceAsStream("/resources/image.png");
    

    URL- . InputStream .

  • , , /

    URL url = getClass().getClassLoader().getResource("resources/image.png");
    

, , . File . , File, , , File, , , InputStream URL


ProjectRoot
       src\resources\image.png

URL url = getClass().getResource("/resources/image.png");
Image image = ImageIO.read(url);
+5

All Articles