Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
I';我无法在Java图像查看器中查看图像_Java_Arrays_Image_Swing_Methods - Fatal编程技术网

I';我无法在Java图像查看器中查看图像

I';我无法在Java图像查看器中查看图像,java,arrays,image,swing,methods,Java,Arrays,Image,Swing,Methods,我正在尝试用java制作一个图像查看器。我的程序所做的是,它接受用户的两个输入,在输入1中,用户输入他想要查看图像的文件夹的路径,在输入2中,用户还输入他想要查看图像的另一个文件夹的路径,然后按下运行按钮。按“运行”按钮时,用户输入的两个文件夹中的第一个图像在图像查看器中平行显示,然后用户可以按不同的按钮查看下一个和上一个图像。我的上述程序代码如下所示:- import java.awt.EventQueue; import java.awt.Font; import java.awt.Imag

我正在尝试用java制作一个图像查看器。我的程序所做的是,它接受用户的两个输入,在输入1中,用户输入他想要查看图像的文件夹的路径,在输入2中,用户还输入他想要查看图像的另一个文件夹的路径,然后按下运行按钮。按“运行”按钮时,用户输入的两个文件夹中的第一个图像在图像查看器中平行显示,然后用户可以按不同的按钮查看下一个和上一个图像。我的上述程序代码如下所示:-

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class Main extends JFrame {

private JPanel contentPane;
public JTextField textField;
public JTextField textField_1;
public JLabel label;
public JLabel label_1;
int pos = 0;
int pos1 = 0;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Main frame = new Main();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public Main() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 693, 421);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblInput = new JLabel("Input 1");
    lblInput.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblInput.setBounds(43, 26, 71, 29);
    contentPane.add(lblInput);

    textField = new JTextField();
    textField.setBounds(124, 26, 312, 29);
    contentPane.add(textField);
    textField.setColumns(10);



    JLabel lblExePath = new JLabel("Input 2");
    lblExePath.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblExePath.setBounds(43, 90, 71, 29);
    contentPane.add(lblExePath);

    textField_1 = new JTextField();
    textField_1.setColumns(10);
    textField_1.setBounds(124, 90, 312, 29);
    contentPane.add(textField_1);

    JButton btnRun = new JButton("Run");
    btnRun.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            showImage(0);
            showImages(0);

        }
    });
    btnRun.setBounds(505, 95, 89, 23);
    contentPane.add(btnRun);

    label = new JLabel("");
    label.setBounds(43, 151, 262, 176);
    contentPane.add(label);

    label_1 = new JLabel("");
    label_1.setBounds(332, 151, 262, 176);
    contentPane.add(label_1);

    JButton btnPrevious = new JButton("Previous");
    btnPrevious.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            pos = pos-1;
            if (pos < 0) {
                pos = 0;
            }
            showImage(pos);

            pos1 = pos1-1;
            if (pos1 < 0) {
                pos1 = 0;
            }
            showImages(pos1);
        }
    });
    btnPrevious.setBounds(124, 349, 89, 23);
    contentPane.add(btnPrevious);

    JButton btnNext = new JButton("Next");
    btnNext.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            pos = pos+1;
            if (pos >= getImage().length) {
                pos = getImage().length - 1;
            }
            showImage(pos);

            pos1 = pos1+1;
            if (pos1 >= getImages().length) {
                pos1 = getImages().length - 1;
            }
            showImage(pos1);
        }
    });
    btnNext.setBounds(331, 349, 89, 23);
    contentPane.add(btnNext);

}


public String[] getImage() {
    File file = new File(textField.getText());
    String[] imagesList = file.list();
    return imagesList;
} 

public void showImage(int index) {
    String[] imagesList = getImage();
    String imageName = imagesList[index];
    ImageIcon icon = new ImageIcon(imageName);
    Image image = icon.getImage().getScaledInstance(label.getWidth(), 
    label.getHeight(), Image.SCALE_SMOOTH);
    label.setIcon(new ImageIcon(image));
}

public String[] getImages() {
    File file = new File(textField_1.getText());
    String[] imagesList = file.list();
    return imagesList;
} 

public void showImages(int index) {
    String[] imagesList = getImages();
    String imageName = imagesList[index];
    ImageIcon icon = new ImageIcon(imageName);
    Image image = icon.getImage().getScaledInstance(label_1.getWidth(), 
    label_1.getHeight(), Image.SCALE_SMOOTH);
    label_1.setIcon(new ImageIcon(image));
 }

}
导入java.awt.EventQueue;
导入java.awt.Font;
导入java.awt.Image;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.File;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.border.EmptyBorder;
公共类主框架{
私有JPanel内容窗格;
公共JTextField textField;
公共JTextField textField_1;
公共标签;
公共标签1;
int pos=0;
int pos1=0;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
主机架=新主机架();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建框架。
*/
公用干管(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100693421);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblInput=新的JLabel(“输入1”);
lblInput.setFont(新字体(“Tahoma”,Font.PLAIN,14));
lblInput.挫折(43,26,71,29);
contentPane.add(lblInput);
textField=新的JTextField();
textField.setBounds(124,26,312,29);
contentPane.add(textField);
textField.setColumns(10);
JLabel lblExePath=新的JLabel(“输入2”);
lblExePath.setFont(新字体(“Tahoma”,Font.PLAIN,14));
lblExePath.立根(43,90,71,29);
contentPane.add(lblExePath);
textField_1=新的JTextField();
textField_1.设置列(10);
textField_1.立根(124,90,312,29);
contentPane.add(textField_1);
JButton btnRun=新JButton(“运行”);
添加ActionListener(新ActionListener(){
已执行的公共无效操作(操作事件arg0){
showImage(0);
显示图像(0);
}
});
btnRun.setBounds(505,95,89,23);
contentPane.add(btnRun);
标签=新的JLabel(“”);
标签.立根(43151262176);
contentPane.add(标签);
标签1=新的JLabel(“”);
标签1.立根(33215262176);
contentPane.add(标签1);
JButton btnPrevious=新JButton(“先前”);
btnprevous.addActionListener(新ActionListener()){
已执行的公共无效操作(操作事件arg0){
pos=pos-1;
如果(位置<0){
pos=0;
}
showImage(pos);
pos1=pos1-1;
if(pos1<0){
pos1=0;
}
showImages(pos1);
}
});
b前一个挫折(124349,89,23);
contentPane.add(btnPrevious);
JButton btnNext=新JButton(“下一步”);
addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件e){
pos=pos+1;
如果(pos>=getImage().length){
pos=getImage()。长度为-1;
}
showImage(pos);
pos1=pos1+1;
if(pos1>=getImages().length){
pos1=getImages()。长度为-1;
}
showImage(pos1);
}
});
下一个立根(331,349,89,23);
contentPane.add(btnNext);
}
公共字符串[]getImage(){
File File=新文件(textField.getText());
字符串[]imagesList=file.list();
返回图像列表;
} 
公共void showImage(整数索引){
字符串[]imagesList=getImage();
字符串imageName=imagesList[index];
ImageIcon图标=新的ImageIcon(imageName);
Image Image=icon.getImage().getScaledInstance(label.getWidth(),
label.getHeight(),Image.SCALE\u平滑);
label.setIcon(新图像图标(图像));
}
公共字符串[]getImages(){
File File=新文件(textField_1.getText());
字符串[]imagesList=file.list();
返回图像列表;
} 
公共void showImages(整数索引){
字符串[]imagesList=getImages();
字符串imageName=imagesList[index];
ImageIcon图标=新的ImageIcon(imageName);
Image Image=icon.getImage().getScaledInstance(标签1.getWidth(),
标签1.getHeight(),图像.SCALE\u平滑);
标签_1.设置图标(新图像图标(图像));
}
}

现在,我面临的问题是,一切正常,我能够在getimage()方法中将用户输入的文件夹文件转换为数组列表,并能够将它们转换为不同的数组,但我无法在showimage()方法中正确遍历该数组,也无法使图像显示在屏幕上。如果在这段代码中还有其他问题,请指导,因为我是编程新手

如果打印您正在使用的文件名,您将看到它们是基本文件名,没有目录。这意味着它们是相对的文件名,它们是否存在完全取决于Java进程本身的当前目录

java.io.File是一个过时的类。你应该避免使用它。相反,请使用,它不仅会返回完整的文件路径,而且还会在尝试列出文件失败时为您提供有用的信息。更换两个occu
String[] imagesList = file.list();
String[] imagesList;
try (DirectoryStream<Path> dir = Files.newDirectoryStream(file.toPath())) {
    Collection<String> paths = new ArrayList<>();
    for (Path path : dir) {
        paths.add(path.toString());
    }
    imagesList = paths.toArray(new String[0]);
} catch (IOException e) {
    throw new RuntimeException("Cannot list files in " + file, e);
}