0

List型(変数名はseznamRacunov)の変数値をあるクラスから別のクラスに転送したいと思います。

クラス1

public class UvoziRacun 
{
  private String potRacuna;
  private List<String> seznamRacunov = new ArrayList();

  public void setRacun(List<String> seznamRacunov)
  {
      this.seznamRacunov = seznamRacunov;
  }

  public List<String> getRacun()
  {
      return seznamRacunov;
  }

  public String getPotRacuna()
  {
      return potRacuna;
  }

  public void showDailog()
  {
      try
      {
        JFileChooser racun = new JFileChooser();
        racun.setCurrentDirectory(new File(""));

        racun.setFileFilter(new javax.swing.filechooser.FileFilter() 
        {
            public boolean accept(File f) 
            {
                return f.getName().toLowerCase().endsWith(".xml") || f.isDirectory();
            }
            public String getDescription() 
            {
                return "XML Datoteka";
            }
        });

        //racun.setMultiSelectionEnabled(true);
        int r = racun.showOpenDialog(new JFrame());

        if (r == JFileChooser.APPROVE_OPTION)
        {
            potRacuna = racun.getSelectedFile().getPath();
            seznamRacunov.add(potRacuna); //value is stored
        }
        //System.out.print("Racuni: " + seznamRacunov);
      }
      catch(Exception ex){}
  }
}

クラス2

public class PrikaziRacune extends javax.swing.JFrame 
{
    UvoziRacun rac = new UvoziRacun();

    public PrikaziRacune() 
    {
        initComponents();

        try
        {
            System.out.print(rac.getRacun()); // value is null, why?
            //jLabel2.setText();
        }
        catch(Exception ex){}
}

メソッドseznamRacunov.add(potRacuna);は、クラス1のseznamRacunovに値を格納しますが、リストの値は、getterを呼び出したクラス2では渡されません。なにが問題ですか?

4

1 に答える 1

1

メソッド seznamRacunov.add(potRacuna); クラス 1 で seznamRacunov に値を格納しますが、getter を呼び出したクラス 2 では list の値が渡されません。

それは、メソッドを呼び出してリストにデータを入力することさえせずに、get()あなたがしようとしているからです。Listmethod - showDailog()add()

  • withメソッドshowDailog()を実際にフェッチする前に、必ずこのメソッドを呼び出してリストにデータを入力してください。Listget

  • constructorまたは、クラスに を追加して、 のタスクを実行initializingする方がよいでしょうList。次に、それを使用してインスタンスを作成できるため、constructor問題はありません。

PS : -コンパイラがこのタスクを処理する0-arg constructorのではなく、常にフィールドを初期化する必要があります。letting

emptyもう 1 つ、 catch ブロックを使用して例外を飲み込んではいけません。そうでなければ、彼らを捕まえても意味がありません。printStackTrace()代わりに通話を追加してください。

 public PrikaziRacune() {
    initComponents();

    try
    {
        rac.showDailog();  // Will populate the list
        System.out.print(rac.getRacun()); // You can get the value here.
        //jLabel2.setText();
    }
    catch(Exception ex) {
        ex.printStackTrace();
    }
}
  • また、ArrayList最初のクラスで宣言を確認してください。generic type ListLHS で使用してRaw type ArrayListおり、RHS では a を使用しています。避けるべきものです。

両側Genericにタイプがあります: -

private List<String> seznamRacunov = new ArrayList<String>();
于 2012-10-18T09:01:17.677 に答える