Java 从另一个方法调用变量

Java 从另一个方法调用变量,java,eclipse,swing,file-io,jfilechooser,Java,Eclipse,Swing,File Io,Jfilechooser,我是eclipse新手,在从其他方法调用变量时遇到问题,例如: btnNewButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { final JFileChooser fc = new JFileChooser(); int returnVal = fc.showD

我是eclipse新手,在从其他方法调用变量时遇到问题,例如:

    btnNewButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {

            final JFileChooser fc = new JFileChooser();
            int returnVal = fc.showDialog(fc, null);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File prnfile = new File(fc.getSelectedFile().toString());

            }

        }

    });
    btnNewButton.setBounds(54, 164, 89, 23);
    frame.getContentPane().add(btnNewButton);

    JButton btnNewButton_1 = new JButton("print");
    btnNewButton_1.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {


              File file = new File(prnfile);
                int ch;
                StringBuffer strContent = new StringBuffer("");
                FileInputStream fin = null;
                try {
                  fin = new FileInputStream(file);
                  while ((ch = fin.read()) != -1)
                    strContent.append((char) ch);
                  fin.close();
                } catch (Exception e1) {
                  System.out.println(e);
                }



    });
    btnNewButton_1.setBounds(257, 164, 89, 23

现在,我如何从另一个方法调用“prnfile”?通常我会在c#中创建一个公共对象,但它在Eclipse中不起作用,所以我不知道该去哪里(作为一个完整的noob:)

我猜你的意思是访问你的对象,而这与Eclipse无关


您的对象文件位于匿名类中。在匿名类之外定义变量,就可以了。

我猜您的意思是访问您的对象,而这与eclipse无关


您的对象文件位于匿名类中。在匿名类之外定义变量,就可以了。

prnfilemouseClickedif块的局部变量,因此当控件从该if块中出来时,prnfile将被垃圾收集,其引用将消失。因此,您无法从if块外部访问它。

prnfile是鼠标点击的if块的局部变量,因此当控件从该if块出来时,prnfile被垃圾收集,其引用消失。因此,您无法从if块外部访问它。

您需要做的是取消文件引用,使其成为全局变量。正如现在所写的,prnFile只是一个局部变量,您将无法在另一个metod中看到该变量,它将在创建后由GC收集。就拿这部分来说:

File prnfile = new File(fc.getSelectedFile().toString());

并移动
文件文件文件在您的方法之外。在第一个侦听器中,您只调用
prnFile=new File(fc.getSelectedFile().toString())
现在,您可以从“打印侦听器”获取存储在
prnFile
中的值您需要做的是取出prnFile reference,使其成为一个全局变量。正如现在所写的,prnFile只是一个局部变量,您将无法在另一个metod中看到该变量,它将在创建后由GC收集。就拿这部分来说:

File prnfile = new File(fc.getSelectedFile().toString());

并移动
文件文件文件在您的方法之外。在第一个侦听器中,您只调用
prnFile=new File(fc.getSelectedFile().toString())
现在您可以从“打印侦听器”

“调用变量”获取存储在
prnFile
中的值了?这毫无意义。你调用方法,而不是变量。你是说访问变量吗?顺便说一句,这与Eclipse无关。我建议你读一本关于Java的好书,开始阅读。你不能从另一个方法中看到局部变量。例如,您需要创建一个实例字段。这一部分与C#完全没有区别。实际上,您使用的是两个匿名内部类。一个创建一个局部变量
文件
,另一个尝试访问它。这是不可能的。您应该在两个匿名内部类上方的类中创建
文件
。只有这样,它才能在这两种方法中都可见和可访问。“从其他方法调用变量时遇到问题”这类内容将在Java教程的早期阶段介绍。创建GUI要晚得多。为什么不回到教程的基础知识上来,暂时把GUI开发放在一边呢?顺便说一句,在你理解基本的OO之前就把IDE扔进这个混合体是一个灾难,依我看,“调用一个变量”?这毫无意义。你调用方法,而不是变量。你是说访问变量吗?顺便说一句,这与Eclipse无关。我建议你读一本关于Java的好书,开始阅读。你不能从另一个方法中看到局部变量。例如,您需要创建一个实例字段。这一部分与C#完全没有区别。实际上,您使用的是两个匿名内部类。一个创建一个局部变量
文件
,另一个尝试访问它。这是不可能的。您应该在两个匿名内部类上方的类中创建
文件
。只有这样,它才能在这两种方法中都可见和可访问。“从其他方法调用变量时遇到问题”这类内容将在Java教程的早期阶段介绍。创建GUI要晚得多。为什么不回到教程的基础知识上来,暂时把GUI开发放在一边呢?顺便说一句,在您理解基本OO之前将IDE加入到混合中是一个灾难,IMO。感谢所有人的回复,因为eclipse没有“designer.cs”之类的东西,所有gui代码都在类中,(而且在eclipse中完全是noob,甚至是java)我只是不知道按钮是在哪里创建的,全局变量是在哪里,甚至主变量是在哪里:)谢谢大家的回复,因为eclipse没有“designer.cs”之类的东西,所有gui代码都在类中,(而且在eclipse中完全是noob,甚至是java)我只是不知道按钮是在哪里创建的,全局变量是在哪里,甚至主变量是在哪里:)