0
public class welcomepage extends javax.swing.JFrame {
    backendcode bec;
    String username;
    public welcomepage() {
            initComponents();
            username=null;
            backendcode bec= new backendcode("dummy");
            System.out.println("bec created "+ bec);
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            System.out.println("bec created "+ bec);
            bec.back_login_credentials(username);
    }
    /*
    and other private methods(not mentioned here) which also needs to access bec object
    */
}

 public class backendcode {
     public backendcode(String dummy) {
           //some code
     }
     public void back_login_credentials(String username, String password) {
          //some code
     }
  }

我已经将 bec(后端代码对象,以便它对整个类可见)声明为 Welcomepage 类中的成员数据并在其构造函数中进行了初始化,但它是在该构造函数中通过一些初始化创建的,但 jButton1ActionPerformed 方法中的 bec 对象值将为空。为什么会这样.. 获得初始化对象实例的解决方案是什么?

4

4 回答 4

3

全局bec变量永远不会被初始化。您在构造函数的范围内创建一个新bec变量。

尝试以下操作:

public class welcomepage extends javax.swing.JFrame {
    backendcode bec;
    String username;
    public welcomepage() {
    initComponents();
            username=null;
            bec= new backendcode("dummy");
    ...
于 2012-09-19T14:40:23.480 回答
1

更改此行

backendcode bec = new backendcode("dummy");

到这一行:

bec = new backendcode("dummy");

如果您仔细查看代码,您正在隐藏全局变量bec 。

于 2012-09-19T14:38:59.593 回答
1

在您的构造函数中,您正在执行以下操作:

backendcode bec= new backendcode("dummy");

...创建一个新变量。您想像这样设置现有字段:

bec= new backendcode("dummy");

无论何时指定类型,您都是在创建一个新变量,而不是设置现有变量的值。这可能会令人困惑,因为您发现局部变量可以与字段具有相同的名称 - 当它们具有相同名称时,它被称为阴影,并且它是该方法的其余部分默认引用的局部变量,而不是字段。

您可以使用this关键字显式引用字段,而不是局部变量。例如,如果您将构造函数更改为以下内容:

public welcomepage() {
    initComponents();
    username=null;
    backendcode bec= new backendcode("dummy");
    System.out.println("bec created "+ this.bec);
}

...您会看到字段 ( this.bec) 仍然为空。

顺便说一句,您可能应该将该字段声明为私有 - 这样它仍然对整个类可见(这就是它是一个字段的原因),但不会从任何其他类可见(或更重要的是,可更改)。如果您确实需要其他类来更改字段的状态,那么您可以通过 getter / setter 方法以更可控的方式进行操作。

于 2012-09-19T14:39:52.737 回答
0

您在构造函数中隐藏了这条线的字段。

backendcode bec= new backendcode("dummy");

它应该是

bec= new backendcode("dummy");

你所做的叫做阴影

我还建议查找Java 命名约定。这将使您的代码更易于阅读。

于 2012-09-19T14:39:40.073 回答