Works fine for me. Check what you may have different.
Example 1: (resources in src)
Steps:
-
File Structure
-
Code
package com.stackoverflow.test; import java.net.URL; import javax.swing.*; // Wild carded for brevity. // Actual code imports single classes public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run() { URL url = Main.class.getResource( "/resources/stackoverflow.png"); ImageIcon icon = new ImageIcon(url); JFrame frame = new JFrame(); frame.add(new JLabel(icon)); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }
-
[Right click on project] → [Export] → [Runnable Jar File] → [Set up Launch config]
-
Profit
FYI, the same setup runs in eclipse just fine also
Example 2: (resources not in src – but in project)
Steps:
-
File Structure (notice resources looks like a plain folder)
-
What we have to do now, is put the resources on the build path. What this does is put everything in the folder (excluding the folder itself) on the classpath
-
Right click on the project and go to [Build Path] → [Configure Build Path]
-
From the [Sources] tab in the dialog, select [Add Folder] and in the new dialog, select the [resources] folder
-
Now the contents of the resources folder is in the build path (notice the little package in the folder now
-
-
New code no longer uses the resources prefix for the path
URL url = Main.class.getResource("/stackoverflow.png");
-
Same as Step 3 and 4 from above, and profit!
UPDATE
Setting up Launch Configuration
Generally, once you run the class (i.e. Right click on class and Run as Java Application), a run configuration will be set up. You will need this to set as the launching point in the manifest. But here’s how to do it manually.
Steps:
-
[Right Click Project] → [Properties] → [Run/Debug Settings]
You can see that I already have a run configruation (that is implicitly set from simply running the class). But to create a new one, select [New] → [Java Application] -
Create a name for run configuration and browse or type an main launching class. In my case its the
com.stackoverflow.test.Main
class -
Now when you export as shown in the above example, you select the run configuration
-
Run the jar like above.
EDIT
Result to Check for
Manifest:
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: com.stackoverflow.test.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Extracted jar: