我找到了这段代码,并且我试图让它适应我的项目。
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.URL;
public class Album {
static boolean contr = false;
static String path = "photos/";
static int MAX;
static String []imgName;
static JLabel label = new JLabel();
static JMenuBar mBar = new JMenuBar();
static JMenu mn = new JMenu("open here ");
static JMenuItem []menuItem;
static JFrame fot = new JFrame();
static JButton back = new JButton(" back ");
public static void Album() {
if (contr==true){
fot.setVisible(true);
}
else{
JFrame.setDefaultLookAndFeelDecorated(true);
File directory = new File(path);
if (!directory.exists()) {
System.err.println("The specified directory doesn't exist!!");
err.err("fail.jpg");
}
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
// Do nothing
}
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
mBar.updateUI();
mn.updateUI();
// Filter out the Images
imgName = directory.list(new FilenameFilter() {
String[] readFormat = ImageIO.getReaderFormatNames();
@Override
public boolean accept(File dir, String name) {
for (int i = 0; i < readFormat.length; i++) {
if (name.endsWith(readFormat[i])) {
return true;
}
}
return false;
}
});
MAX = imgName.length;
if (MAX == 0) {
System.err.println("OOps , no images");
System.exit(-1);
}
//Limit the maximunm entries to 10
if (MAX > 19) {
MAX = 19;
}
menuItem = new JMenuItem[MAX];
for (int i = 0; i < menuItem.length; i++) {
menuItem[i] = new JMenuItem(imgName[i].substring(0, imgName[i].lastIndexOf(".")), new ImageIcon(getImage(path + imgName[i]).getScaledInstance(32, 32, Image.SCALE_SMOOTH)));
menuItem[i].updateUI();
mn.add(menuItem[i]);
menuItem[i].setActionCommand(imgName[i]);
menuItem[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
label.setIcon(new ImageIcon(getImage(path + ae.getActionCommand())));
}
});
}
mBar.add(mn);
fot.setJMenuBar(mBar);
fot.add(new JScrollPane(label));
fot.add(back, BorderLayout.AFTER_LAST_LINE);
Dimension scrDim = Toolkit.getDefaultToolkit().getScreenSize();
fot.setSize(scrDim.width-250 , scrDim.height-50);
fot.setVisible(true);
fot.setTitle("photo album");
fot.setResizable(false);
fot.setLocationRelativeTo(null);
fot.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
back.addActionListener(new ActionListener() { //back
@Override
public void actionPerformed(ActionEvent e) {
fot.setVisible(false);
contr=true;
menu.menu();
}
});
}
}
// Get the Image from the disk
public static Image getImage(String fileName) {
try {
return ImageIO.read(new File(fileName));
} catch (IOException ioe) {
System.err.println("Error loading Image : " + fileName);
}
return null;
}
}
我必须在.jar文件中导出所有文件,从eclipse正常运行它,而一旦导出.jar文件不起作用。问题是我找不到照片/文件夹,它是第二个资源文件夹,但也试图root无法正常工作。相反,它可以读取.jar文件中的eclipse,作为参数传递的每个图像,以及调用在图像中显示错误消息的下一个类:
err.err("fail.jpg");
项目文件夹的模式如下:
项目:
所有路径名都是正确的,als&#34; fail.jpg&#34;。 在我寻找解决方案的几周内,我需要知道如何直接从资源文件夹上传图像,以使它们直接在.jar文件中工作。非常感谢!
答案 0 :(得分:1)
您应该考虑使用getResourceAsStream("/fail.jpg")
方法来获取文件。一个例子看起来像
InputStream inputStream = Main.class.getResourceAsStream("/fail.jpg");
您的jpg文件应该位于此示例的源文件夹中。
您可以在jar文件中使用任何类而不是Main。