"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);