【问题标题】:Use other class methods and fields inside another在另一个类中使用其他类方法和字段
【发布时间】:2018-01-21 11:49:30
【问题描述】:

我有一个概念性问题。(一些问题!) 让我们用一个真实的项目来解释它。 我有一个Loginswing 表单,它有 main 方法,应用程序从这里开始。

  java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Login().setVisible(true);
        }
    }); // this method is inside main Method

Login 表单包含一些TextFields 和Buttons,还有一些methods。 (例如,当我按下 Enter 按钮时,会执行一些身份验证和操作) 按下 Enter 按钮后,如果验证成功,它将转到另一个名为 MainTabbedForm 的表单。 现在的问题是关于Object Oriented Programming 和类加载。 我想从MainTabbedForm 访问Login 表单。例如,我想disposeLogin 表单在身份验证成功后,并想在MainTabbedForm 构造函数中进行。我在Login 类中编写了一个方法来将登录连接到MainTabbedForm。这样:

public void disappearForm(MainTabbedForm form) {
this.form=form; // I already has defined a MainTabbedForm field in top of the Login class
this.dispose(); // Dispose the Login class
}

并在MainTabbedForm的构造函数中使用,使用前只需在MainTabbedForm中声明一个Login Form作为字段即可;

public MainTabbedForm(Login login) { 
   this.login=login;
   login.disappearForm(this)
}

但它给了我 NullPointException 因为登录尚未初始化。 如果我创建一个新的登录类,当然它是一个新类,不会做我想要的事情,因为它是一个新实例,而不是第一个在 main 方法中创建的 Login。 现在我有一个问题,如何将这两个类相互连接? 当然,我可以制作一个静态方法来完成我的工作!但我不想这样做。 我认为由于此类加载和编程框架和设计模式的艺术,如OSGiMVC 和其他人已经创建,以更动态地管理加载和访问服务和对象以及其他事物,对吗? 现在对这些答案的回复非常感谢!

【问题讨论】:

  • 为什么要从MainTabbedForm 拨打dispose()?你是如何创建MainTabbedForm 的?为什么它还将对自身的引用传递给disappearForm()方法?

标签: java oop classloader


【解决方案1】:

Login 你可以这样做:

MainTabbedForm mtf = MainTabbedForm(); //create 
//set the required information using setters 
//for example set userName which is defined in Login to MainTabbedForm
mtf.setUserName(this.userName); 
//....
this.dispose(); //when no longer needed  

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2012-08-03
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多