我如何从java中的方法中获取变量而不调用所述方法?
我正在编写一个小音频播放器,需要帮助;方法fopen()由另一个类中的按钮调用(这里不是问题);问题是,如果不调用该方法,我无法以字符串形式获取文件的路径 playsound()方法需要fopen()中的filepath变量,如果我使用字符串“path”(在fopen()之后初始化),它会再次调用该方法 我只需要'filepath'变量,但我无法在fopen()之外访问它,或者至少据我所知不需要。关于如何在不调用fopen()的情况下访问filepath的帮助 编辑:修复了将fopen()设置为返回“文件”而不是字符串的问题。还对代码进行了一些修改;在不应该调用fopen()时调用fopen()的问题已经解决,但现在它给了我一个java.io.FileNotFoundException:当我调用playsound()时(据我所知,这意味着文件的路径和/或名称甚至没有被记录)。这里还发生了什么 编辑2:我只想问另一个问题,因为手头的问题似乎已经得到了回答,而我手上有一个完全不同的问题我如何从java中的方法中获取变量而不调用所述方法?,java,methods,invoke,Java,Methods,Invoke,我正在编写一个小音频播放器,需要帮助;方法fopen()由另一个类中的按钮调用(这里不是问题);问题是,如果不调用该方法,我无法以字符串形式获取文件的路径 playsound()方法需要fopen()中的filepath变量,如果我使用字符串“path”(在fopen()之后初始化),它会再次调用该方法 我只需要'filepath'变量,但我无法在fopen()之外访问它,或者至少据我所知不需要。关于如何在不调用fopen()的情况下访问filepath的帮助 编辑:修复了将fopen()设置为
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:很难说。该方法调用在类中挂起,因此发布的代码甚至不应该编译。