我如何从java中的方法中获取变量而不调用所述方法?

我如何从java中的方法中获取变量而不调用所述方法?,java,methods,invoke,Java,Methods,Invoke,我正在编写一个小音频播放器,需要帮助;方法fopen()由另一个类中的按钮调用(这里不是问题);问题是,如果不调用该方法,我无法以字符串形式获取文件的路径 playsound()方法需要fopen()中的filepath变量,如果我使用字符串“path”(在fopen()之后初始化),它会再次调用该方法 我只需要'filepath'变量,但我无法在fopen()之外访问它,或者至少据我所知不需要。关于如何在不调用fopen()的情况下访问filepath的帮助 编辑:修复了将fopen()设置为

我正在编写一个小音频播放器,需要帮助;方法fopen()由另一个类中的按钮调用(这里不是问题);问题是,如果不调用该方法,我无法以字符串形式获取文件的路径

playsound()方法需要fopen()中的filepath变量,如果我使用字符串“path”(在fopen()之后初始化),它会再次调用该方法

我只需要'filepath'变量,但我无法在fopen()之外访问它,或者至少据我所知不需要。关于如何在不调用fopen()的情况下访问filepath的帮助

编辑:修复了将fopen()设置为返回“文件”而不是字符串的问题。还对代码进行了一些修改;在不应该调用fopen()时调用fopen()的问题已经解决,但现在它给了我一个java.io.FileNotFoundException:当我调用playsound()时(据我所知,这意味着文件的路径和/或名称甚至没有被记录)。这里还发生了什么

编辑2:我只想问另一个问题,因为手头的问题似乎已经得到了回答,而我手上有一个完全不同的问题

package mediaz;
import javazoom.jl.player.*;
import javax.swing.filechooser.*;
import java.io.*;
import javax.swing.JFileChooser;


public class audio { 
private String lastfilepath = "";
public String fopen(){
    JFileChooser fc= new JFileChooser();
    FileNameExtensionFilter filtermp3 = new FileNameExtensionFilter("MPEG-2
    Audio Layer III", "mp3");
    fc.setFileFilter(filtermp3);
    int ret = fc.showOpenDialog(null);
if (ret == JFileChooser.APPROVE_OPTION) 
    {
        File file = fc.getSelectedFile();
        String filepath = file.getAbsolutePath();
        this.lastfilepath = filepath;
        return filepath;
    }
else
    return null;
}

String path = fopen();     

void playsound(){

    System.out.println("You pressed play.");
    try{
    FileInputStream fis = new FileInputStream(this.lastfilepath);
    Player playMP3 = new Player(fis);
    playMP3.play();
    }
    catch(Exception e){
    System.out.println("Error: '" + e +"'");
    }
}
//  IGNORE WHAT'S BELOW HERE    //
void rewsound(){
    System.out.println("You pressed rewind.");
    }

void pausesound(){    
    System.out.println("You pressed pause.");
    }

/*    void forwardsound(){
    System.out.println("You pressed fast forward.");
}
*/
}

在音频中创建一个字符串实例变量,然后在调用fopen()时将当前选定文件的路径存储在该字符串中

请参阅下面的代码。未经测试,但想法就在这里。而且,这段代码的格式非常糟糕,很难阅读。这就是它应该看起来的样子(ish)

编辑:在代码中添加了一些关于一般改进/编码风格的注释

编辑:有关代码中更新的try的更多信息,请参阅:


在音频中创建一个字符串实例变量,然后在调用fopen()时将当前选定文件的路径存储在该字符串中

请参阅下面的代码。未经测试,但想法就在这里。而且,这段代码的格式非常糟糕,很难阅读。这就是它应该看起来的样子(ish)

编辑:在代码中添加了一些关于一般改进/编码风格的注释

编辑:有关代码中更新的try的更多信息,请参阅:


您的
fopen()
方法声明为返回一个
文件
,但在该方法中您返回一个字符串。如果您返回用户选择的文件,然后将此引用存储在某个位置,则可以随时询问该文件的路径。

您的
fopen()
方法声明为返回
文件,但在该方法中,您返回字符串。如果返回用户选择的文件,然后将此引用存储在某个位置,则可以随时询问该文件的路径。

创建另一个方法,返回在
fopen()
中确定的最后一个文件路径,例如:

private String lastFilepath;

public String fopen() {
    // logic for determining filepath
    lastFilepath = filepath;
    return filepath;
}

public String getLastFilepath() {
    return lastFilepath;
}

创建另一个方法,返回在
fopen()
中确定的最后一个文件路径,例如:

private String lastFilepath;

public String fopen() {
    // logic for determining filepath
    lastFilepath = filepath;
    return filepath;
}

public String getLastFilepath() {
    return lastFilepath;
}

首先,您应该阅读java编程

您当前拥有的是变量“filepath”的本地作用域。要使其在方法块之外可访问,可以将其作为方法结果返回,也可以将其分配给实例变量

此外,请注意,您的fopen()方法当前不会编译,因为它被声明为返回文件,但内部尝试返回字符串类型

我建议如下:

public class foo {
    private String filePath;

    private void readFile() {
        filePath = doReadingHere();
    }

    private void useFilePath() {
        System.out.println(filePath);
        // do what ever you like to do with the instance variable filePath
    }
}

首先,您应该阅读java编程

您当前拥有的是变量“filepath”的本地作用域。要使其在方法块之外可访问,可以将其作为方法结果返回,也可以将其分配给实例变量

此外,请注意,您的fopen()方法当前不会编译,因为它被声明为返回文件,但内部尝试返回字符串类型

我建议如下:

public class foo {
    private String filePath;

    private void readFile() {
        filePath = doReadingHere();
    }

    private void useFilePath() {
        System.out.println(filePath);
        // do what ever you like to do with the instance variable filePath
    }
}

您在这里混淆了对象和变量。您想要的不是变量,而是变量第一次调用时所持有的值(对象)。当您第一次调用此方法时,为什么不简单地将文件路径值保存到可访问变量中?@hovercraftfullofels我认为它正在保存,但格式设置已关闭。看起来类实例化时调用了
String path=fopen()
。不过我不确定。我不知道括号是否匹配。@ChristopherSchneider:很难说。该方法调用在类中挂起,因此发布的代码甚至不应该编译。您想要的不是变量,而是变量第一次调用时所持有的值(对象)。当您第一次调用此方法时,为什么不简单地将文件路径值保存到可访问变量中?@hovercraftfullofels我认为它正在保存,但格式设置已关闭。看起来类实例化时调用了
String path=fopen()
。不过我不确定。我不知道括号是否匹配。@ChristopherSchneider:很难说。该方法调用在类中挂起,因此发布的代码甚至不应该编译。