gpt4 book ai didi

java - 如何从java中的方法获取变量而不调用该方法?

转载 作者:行者123 更新时间:2023-12-01 16:53:32 25 4
gpt4 key购买 nike

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

Playsound() 方法需要来自 fopen() 的文件路径变量,如果我使用字符串“路径”(在 fopen() 之后初始化),它会再次调用该方法。

我只需要“文件路径”变量,但我无法在 fopen() 之外访问它,或者至少据我所知无法访问它。有关如何在不调用 fopen() 的情况下访问文件路径的帮助?

编辑:修复了 fopen() 设置为返回"file"而不是字符串的问题。还对代码做了一些修改;修复了不应该调用 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.");
}
*/
}

最佳答案

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

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

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

编辑:有关我在代码中更新的尝试的更多信息,请参阅:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

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


public class audio {
private String filePath = "";

public File 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();
this.filePath = file.getAbsolutePath()
return filepath; // should be file
} else // give me braces please!
return null;
}

// try to stick to camelCase, it is the 'Java' way
void playsound() {
System.out.println("You pressed play.");
// streams implement AutoCloseable, use it
// also, you were not closing fis as it was
try (FileInputStream fis = new FileInputStream(this.filePath)) {
Player playMP3 = new Player(fis);
playMP3.play();
} catch (Exception e) {
System.out.println("Error: '" + e + "'");
}
}
}

关于java - 如何从java中的方法获取变量而不调用该方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35902747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com