2014-09-04 3 views
0

Моя программа отображает пользовательский интерфейс и обновляет JLabel в соответствии с данным пользователем.Закрытие предыдущего экземпляра конструктора JAVA

Мой код: -

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; 
} 
} 

Проблема: -

В процессе выполнения, пользовательский интерфейс создается, и я дать ввод и все методы вызываются и выполняются, и JLabel изменился в первый раз.

Но когда я даю вход второй раз и нажимаю кнопку поиска, текст Jlabel остается таким же.

finder конструктор создает метаданные в соответствии с данным вводом, поэтому, если пользователь вводит несколько раз несколько раз, будет инициировано несколько экземпляров конструктора.

Теперь я немного отлаживал и обнаружил, что во второй раз метаданные предыдущего конструктора все еще находятся в памяти вместе с новыми метаданными.

Таким образом, выход mm.find("title"); второй раз совпадает с выходом, который мы получили в первый раз.

Пожалуйста, помогите мне исправить это и благодарить заранее.

ответ

2

static String metadata

Ваш член метаданных является статическим, что является причиной, почему все экземпляры этого класса см и обновить ту же копию этого члена.

Ваш конструктор finder прилагается к статическому члену - metadata+=s.nextLine()+"\n";. Поэтому данные, добавленные предыдущими вызовами конструктора, все еще существуют.

Если вы хотите, чтобы у каждого экземпляра finder были разные metadata, удалите ключевое слово static.

+0

Серьезно так просто. Это работает, спасибо. – Mohit

Смежные вопросы