Java 如何获取循环外部的路径名?

Java 如何获取循环外部的路径名?,java,image,swing,static,path,Java,Image,Swing,Static,Path,初始化字段并为其指定所需的值: private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { jButton3.addMouseListener(new MouseAdapter() { //String pathName; @Override public void mouseClicked(MouseEvent arg0) { St

初始化字段并为其指定所需的值:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
     jButton3.addMouseListener(new MouseAdapter() {
        //String pathName;
        @Override
        public void mouseClicked(MouseEvent arg0) {
            String pathName = null;
            FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
            fc.setFileFilter(filter);
            int response = fc.showOpenDialog(null);

            try {
                if (response == JFileChooser.APPROVE_OPTION) {
                     pathName = fc.getSelectedFile().getPath();
                    System.out.println(pathName);      // this works
                    //JOptionPane.showMessageDialog(null, pathName);
                    ImageIcon icon = new ImageIcon(pathName);
                    jLabel4.setIcon(icon);
                } else {
                    //   JOptionPane.showMessageDialog(null, "Feel Free to Look Later");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    System.out.println(pathName);     // THIS DOESNOT
}                                       

pathName
变量是在
mouseClicked
函数中创建的,因此一旦函数完成,它将被销毁

您可以在函数内部使用它,这就是为什么您的第一个printLn语句可以工作,但它不会存在于函数外部。若要解决此问题,请将数据分配给函数启动前已存在的变量,以便该变量在函数结束后继续存在


移动
字符串路径名=null进入一个更高的范围(如进入包含此代码的类),这将起作用。

1)对于按钮,添加一个
ActionListener
,而不是鼠标侦听器。按钮侦听器将响应机器人鼠标和键盘输入。2) 研究“可变范围”,这是一个在进入高级领域(如制作GUI)之前应该明确的主题。3) 好的。。我刚刚注意到(关于(1))这段代码在action listener的action performed方法中添加了一个鼠标侦听器!这毫无意义。删除对鼠标侦听器的所有提及。为什么要在其
ActionListener
内的按钮中添加
鼠标侦听器?
private String pathName;

jButton3.addMouseListener(new MouseAdapter() {
    ....
    pathName = fc.getSelectedFile().getPath();
    ....
});
System.out.println(pathName);