কোনও সংস্থান লোড করার সময় আপনি এটির মধ্যে পার্থক্য লক্ষ্য করেছেন তা নিশ্চিত করুন:
getClass().getClassLoader().getResource("com/myorg/foo.jpg") //relative path
এবং
getClass().getResource("/com/myorg/foo.jpg")); //note the slash at the beginning
আমার ধারণা, কোনও সংস্থান লোড করার সময় এই বিভ্রান্তি বেশিরভাগ সমস্যার সৃষ্টি করে।
এছাড়াও, আপনি যখন কোনও চিত্র লোড করছেন তখন এটি ব্যবহার করা সহজ getResourceAsStream()
:
BufferedImage image = ImageIO.read(getClass().getResourceAsStream("/com/myorg/foo.jpg"));
যখন আপনাকে সত্যিই কোনও জআর সংরক্ষণাগার থেকে কোনও (অ-চিত্র) ফাইল লোড করতে হবে, আপনি এটি চেষ্টা করতে পারেন:
File file = null;
String resource = "/com/myorg/foo.xml";
URL res = getClass().getResource(resource);
if (res.getProtocol().equals("jar")) {
try {
InputStream input = getClass().getResourceAsStream(resource);
file = File.createTempFile("tempfile", ".tmp");
OutputStream out = new FileOutputStream(file);
int read;
byte[] bytes = new byte[1024];
while ((read = input.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.close();
file.deleteOnExit();
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
} else {
//this will probably work in your IDE, but not from a JAR
file = new File(res.getFile());
}
if (file != null && !file.exists()) {
throw new RuntimeException("Error: File " + file + " not found!");
}