gpt4 book ai didi

java - 关闭构造函数 JAVA 的先前实例

转载 作者:行者123 更新时间:2023-12-02 05:29:54 27 4
gpt4 key购买 nike

我的程序显示 UI 并根据用户给出的输入更新 JLabel

我的代码:-

public static void main(String[] args)
{
createUI();
}

public void createUI()
{
// creates the UI using JSwing
// takes userinput from textfield and stores it in variable:- path.
// The UI is updated on the click of button.

JButton bu = new JButton("Search");
bu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
finder mm= new finder(path);
String namefomovie = mm.find("Title");
//nameb is a Jlabel in the UI
nameb.setText(namefomovie);

}
}

查找器类别:-

public class finder
{
static String metadata="";

public finder(String path) throws FileNotFoundException
{


File myfile = new File(path);
Scanner s = new Scanner(myfile);

while(s.hasNextLine())
metadata+=s.nextLine()+"\n";

}

public String find(String info)
{
//finds the required info stored in metadata and return the answer.
return ans;
}
}

问题:-

在执行期间,创建 UI,我提供输入,调用并执行所有方法,并且第一次更改 JLabel。

但是当我第二次输入并单击搜索按钮时,Jlabel 的文本保持不变。

finder构造函数根据给定的输入创建元数据,因此如果用户多次提供输入,将启动构造函数的多个实例。

现在我做了一些调试,发现在第二次时,之前的构造函数的元数据仍然与新的元数据一起在内存中。

因此,第二次 mm.find("title"); 的输出与我们第一次获得的输出相同。

请帮我解决这个问题并提前致谢。

最佳答案

静态字符串元数据

您的元数据成员是静态的,这就是该类的所有实例看到并更新该成员的相同副本的原因。

finder 的构造函数附加到静态成员 - metadata+=s.nextLine()+"\n";。因此,之前的构造函数调用附加的数据仍然存在。

如果您希望 finder 的每个实例都有不同的元数据,请删除 static 关键字。

关于java - 关闭构造函数 JAVA 的先前实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662155/

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