Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从项目文件夹中检索图像_Java_Swing_Timer_Jlabel_Imageicon - Fatal编程技术网

Java 如何从项目文件夹中检索图像

Java 如何从项目文件夹中检索图像,java,swing,timer,jlabel,imageicon,Java,Swing,Timer,Jlabel,Imageicon,我正在尝试从我的文件夹图像洗牌图像,我可以这样做。我必须传递图像的名称,但我不想传递图像的名称,我只想给出文件夹的名称,所有图像都应该从那里开始,我该怎么做 这是我的密码 public class main1 extends javax.swing.JFrame { private JLabel ecause = new JLabel(); private List<BufferedImage> list = new ArrayList<BufferedIma

我正在尝试从我的文件夹图像洗牌图像,我可以这样做。我必须传递图像的名称,但我不想传递图像的名称,我只想给出文件夹的名称,所有图像都应该从那里开始,我该怎么做

这是我的密码

public class main1 extends javax.swing.JFrame {

    private JLabel ecause = new JLabel();
    private List<BufferedImage> list = new ArrayList<BufferedImage>();
    private List<BufferedImage> shuffled;
    private JLabel label = new JLabel();
    private int width = 700;
    private int height = 700;
    private Timer timer = new Timer(4000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            update();
        }
    });

    public main1() {
        this.getContentPane().setBackground(new java.awt.Color(153, 153, 0));
        this.setUndecorated(true);
        ecause.setText("           eCause List");
        ecause.setBounds(0, 1278, 496, 88);
        ecause.setFont(new java.awt.Font("Times New Roman", 1, 40));
        ecause.setBackground(new java.awt.Color(255, 153, 0));
        ecause.setOpaque(true);
        this.add(ecause);
        initComponents();
        try {
            list.add(resizeImage(ImageIO.read(new File("images\\Picture2.png"))));
            list.add(resizeImage(ImageIO.read(new File("images\\Picture3.png"))));
            list.add(resizeImage(ImageIO.read(new File("images\\Picture4.png"))));
            list.add(resizeImage(ImageIO.read(new File("images\\Picture5.png"))));
        } catch (IOException e) {
            e.printStackTrace();
        }
        shuffled = new ArrayList<BufferedImage>(list);
        Collections.shuffle(shuffled);
        timer.start();

    }

    private BufferedImage resizeImage(BufferedImage originalImage) throws IOException {
        BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, width, height, null);
        g.dispose();
        return resizedImage;
    }

    private void update() {
        if (shuffled.isEmpty()) {
            shuffled = new ArrayList<BufferedImage>(list);
            Collections.shuffle(shuffled);
        }
        BufferedImage icon = shuffled.remove(0);
        jLabel3.setIcon(new ImageIcon(icon));
    }
}
public类main1扩展了javax.swing.JFrame{
私有JLabel ecause=新JLabel();
私有列表=新的ArrayList();
私人名单被洗牌;
专用JLabel标签=新JLabel();
私有整数宽度=700;
私人室内高度=700;
私有计时器=新计时器(4000,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
更新();
}
});
公共main 1(){
this.getContentPane().setBackground(新java.awt.Color(153153,0));
此项。未装饰的设置(正确);
ecause.setText(“ecause列表”);
因为退步(0,1278,496,88);
setFont(新java.awt.Font(“Times new Roman”,1,40));
setBackground(新java.awt.Color(255,153,0));
ecause.set不透明(true);
本条。添加(e原因);
初始化组件();
试一试{
添加(resizeImage(ImageIO.read(新文件(“images\\Picture2.png”)));
添加(resizeImage(ImageIO.read)(新文件(“images\\Picture3.png”)));
添加(resizeImage(ImageIO.read)(新文件(“images\\Picture4.png”)));
添加(resizeImage(ImageIO.read)(新文件(“images\\Picture5.png”)));
}捕获(IOE异常){
e、 printStackTrace();
}
shuffled=新数组列表(列表);
收藏。洗牌(洗牌);
timer.start();
}
私有BuffereImage resizeImage(BuffereImage originalImage)引发IOException{
BuffereImage resizedImage=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_ARGB);
Graphics2D g=resizedImage.createGraphics();
g、 drawImage(原始图像,0,0,宽度,高度,空);
g、 处置();
返回resizedImage;
}
私有void更新(){
if(shuffled.isEmpty()){
shuffled=新数组列表(列表);
收藏。洗牌(洗牌);
}
BuffereImage图标=已洗牌。移除(0);
jLabel3.setIcon(新图像图标(图标));
}
}

如何实现输出?

您可以按如下方式列出文件夹中包含的每个文件:

File[] files = new File("images/").listFiles();
注意,它还将给出子目录

所以不是

list.add(resizeImage(ImageIO.read(new File("images\\Picture2.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture3.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture4.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture5.png"))));

您可以简单地循环使用
listFiles
方法给出的每个文件。您还可以使用,以便筛选出每个不是图像的文件。

我会将此添加为注释,但尚未让代表执行此操作

new File("images/myimage.png")
如果将代码打包到一个jar中,则不会工作。为此,您需要使用getResourceAsStream(),如果您的images文件夹位于项目根目录下,您可以执行以下操作:

this.getClass().getResourceAsStream("/images")
这里的第一条斜线很重要——它表示您是从项目根开始的。如果你只是把“图像”放进去,它会从你把代码放进的任何类中看出来(比如你在com.somepackage.blah中,它会在blah包中寻找你的图像)


希望这有帮助

@mKorbel谢谢你的编辑。你能帮我解决我的问题吗?似乎能帮你我有点困惑。你能给我写点代码吗?我当然不会做你的家庭作业:)
listFile
会返回目录中的每个文件。只需使用
for循环
对它们进行迭代,并将它们添加到图像列表中。如果目标目录位于项目类路径中,则没有帮助。他说原始代码可以工作,所以我猜它确实有帮助。目标目录是项目类路径