作为参数传输的Object的引用

时间:2012-04-07 21:45:58

标签: java object reference

  

第三代码示例包含错误 - 如何解决?

在下面的代码中,我生成了一个名为“generator”的方法。 此方法接收JTextField和JLabel作为参数。

它会生成单独的JPanel并将它们添加到另一个JPanel(带有Border“Vermieter”的JPanel)上。 结果应如下所示(标记为红色):

http://imageshack.us/photo/my-images/853/stammdateneraffsenguibe.png/

这里我将JTextFields实例化为字段:

private JTextField txtplzvermieter;
private JTextField txtemailvermieter;
private JTextField txtgeburtsdatumvermieter;
private JTextField txthandyvermieter;
private JTextField txtidvermieter;
private JTextField txtnamevermieter;
private JTextField txtortvermieter;
private JTextField txtstrassevermieter;
private JTextField txttelefonvermieter;
private JTextField txtvornamevermieter;

这里我正在调用我上面描述的方法

        public  void vermieterPanel(JPanel verPanel){
         verPanel.add(generator( "ID", txtidvermieter ));
       verPanel.add(generator("Name", txtnamevermieter ));
       verPanel.add(generator( "Vorname", txtvornamevermieter ));
       verPanel.add(generator( "Straße", txtstrassevermieter ));
       verPanel.add(generator("PLZ", txtplzvermieter ));
       verPanel.add(generator( "Ort", txtortvermieter ));
       verPanel.add(generator( "Geburtsdatum", txtgeburtsdatumvermieter ));
       verPanel.add(generator( "Telefon", txttelefonvermieter ));
       verPanel.add(generator("Handy", txthandyvermieter ));
       verPanel.add(generator( "E-Mail", txtemailvermieter ));

这里是包含错误的方法生成器:

      public JPanel generator(String lableText, JTextField s){   // generiert ein Panel mit einer Zeile aus lable + TextFeld

     JPanel gens = new JPanel();
     JLabel lable = new JLabel(lableText);
     lable.setPreferredSize(new Dimension(100,25));

     s = new JTextField();
     s.setPreferredSize(new Dimension(200, 25));


    gens.add(lable);
    gens.add(s);
    return gens;
  }

以后我无法使用.getText();在我的TeftFields上获得引用,因为我在这里创建了对新JTextField-Object的引用s = new JTextField();

如果我删除该行以访问我的对象,我会得到一个Null-Pointer异常。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

永远不会创造原始价值。你需要这样做

private JTextField txtplzvermieter = new JTextField();

他们每个人。但它必须在方法之外,而不是在内部。

答案 1 :(得分:0)

java 中,您无法传递对象作为参考,它永远不会发生 这是创建 java 语言,最小内存管理的目的 如果将对象作为参数传递,则将传递对象引用的副本 所以对象'field的每一个更改都会被反映出来,除非用一个带有new关键字的新对象进行分配,这里你将失去你对象的抓取 尝试将 JField 设为全局class field,并且不要通过参数部分将它们传递给方法。

答案 2 :(得分:0)

当然你会得到一个异常,因为你在初始化之前传递了JTextield !!
你只是在宣布它,
在将其作为参数传递之前,使用new关键字对其进行初始化。