我的程序显示一个用户界面,并根据用户给定的输入更新 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");
的输出与我们第一次得到的输出相同。
请帮我解决这个问题,并提前致谢。
答案 0 :(得分:2)
static String metadata
您的元数据成员是静态的,这就是为什么该类的所有实例都会查看并更新该成员的同一副本的原因。
finder
的构造函数附加到静态成员 - metadata+=s.nextLine()+"\n";
。因此,先前构造函数调用附加的数据仍然存在。
如果您希望finder
的每个实例都有不同的metadata
,请删除static
关键字。