Tôi có một dự án Java với một thanh công cụ và thanh công cụ có các biểu tượng trên đó. Các biểu tượng này được lưu trữ trong một thư mục được gọi là tài nguyên /, ví dụ, đường dẫn có thể là "resources/icon1.png". Thư mục này nằm trong thư mục src của tôi, vì vậy khi được biên soạn, thư mục được sao chép vào bin/Cách truy cập tài nguyên trong tệp JAR?
Tôi đang sử dụng mã sau để truy cập tài nguyên.
protected AbstractButton makeToolbarButton(String imageName, String actionCommand, String toolTipText,
String altText, boolean toggleButton) {
String imgLocation = imageName;
InputStream imageStream = getClass().getResourceAsStream(imgLocation);
AbstractButton button;
if (toggleButton)
button = new JToggleButton();
else
button = new JButton();
button.setActionCommand(actionCommand);
button.setToolTipText(toolTipText);
button.addActionListener(listenerClass);
if (imageStream != null) { // image found
try {
byte abyte0[] = new byte[imageStream.available()];
imageStream.read(abyte0);
(button).setIcon(new ImageIcon(Toolkit.getDefaultToolkit().createImage(abyte0)));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
imageStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} else { // no image found
(button).setText(altText);
System.err.println("Resource not found: " + imgLocation);
}
return button;
}
(imageName sẽ là "resources/icon1.png" v.v ...). Điều này làm việc tốt khi chạy trong Eclipse. Tuy nhiên, khi tôi xuất một JAR runnable từ Eclipse, các biểu tượng không được tìm thấy.
Tôi đã mở tệp JAR và thư mục tài nguyên ở đó. Tôi đã thử mọi thứ, di chuyển thư mục, thay đổi tệp JAR, v.v. nhưng tôi không thể hiển thị các biểu tượng.
Có ai biết tôi đang làm gì sai không?
(Là một câu hỏi phụ, có bất kỳ trình giám sát tệp nào có thể hoạt động với các tệp JAR không? Khi vấn đề đường dẫn phát sinh, tôi thường mở FileMon để xem điều gì đang xảy ra, nhưng nó chỉ hiển thị khi truy cập tệp JAR trong trường hợp này)
Cảm ơn bạn.
Vì vậy, 5 dòng mã để tải biểu tượng tốt hơn, sau đó 2 dòng mã?Tất nhiên để tìm ra bí mật để sử dụng 2 dòng mã, bạn sẽ thực sự phải tự mình làm một số việc đọc. Tôi đoán bí mật sẽ vẫn ẩn. – camickr