Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇:孩子会杀死父母吗?_Java - Fatal编程技术网

Java 爪哇:孩子会杀死父母吗?

Java 爪哇:孩子会杀死父母吗?,java,Java,在下面的代码段中,父类启动控制器,然后隐藏。 如果能够在jMenuItemExitActionPerformed上杀死ParentClass,那就太好了。 回想起来,我本应该扭转父子关系,但在这一点上,这将是一个很大的变化。 有没有更简单的方法 public class ParentClass extends javax.swing.JFrame { private void processC() { JFrame controller = new Controller(

在下面的代码段中,父类启动控制器,然后隐藏。 如果能够在
jMenuItemExitActionPerformed上杀死ParentClass,那就太好了。
回想起来,我本应该扭转父子关系,但在这一点上,这将是一个很大的变化。 有没有更简单的方法

public class ParentClass extends javax.swing.JFrame {
    private void processC() {
        JFrame controller = new Controller();
        this.setVisible(false);
        ...
public class Controller extends javax.swing.JFrame {
    private void jMenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        System.exit(0);
        ...

反转父/子关系是更简单的方法。如果你不这样做,你会投入大量的时间和精力来解决这个问题,你会希望自己一开始就做对了。你应该总是按照你所知道的方式来建造东西。花费时间是值得的。

最简单的方法是将引用传递给家长,如下所示:

public class ParentClass extends javax.swing.JFrame {
    private void processC() {
        JFrame controller = new Controller(this);
        this.setVisible(false);
        ...
public class Controller extends javax.swing.JFrame {
    private ParentClass parent;
    public Controller(ParentClass parent) {
        this.parent = parent;
    }
    private void jMenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        parent.exit(); // or whatever
        System.exit(0);
        ...

像这样在父类中添加公共静态出口似乎是可行的

public class ParentClass extends javax.swing.JFrame { 
    private void processC() { 
        JFrame controller = new Controller(); 
        this.setVisible(false); 
        ... 
    public static void exit() {
        System.exit(0);
  ...
public class Controller extends javax.swing.JFrame { 
    private void jMenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {
        ParentClass.exit(); 
        ... 

这不是一个循环引用(父->子->父…)?在ParentClass中添加公共静态出口似乎有效。@JackN:您不必担心循环引用。它不会造成任何伤害。GC非常聪明,可以解决这个问题。如果exit()方法只调用System.exit(0),那么您可以保留原始代码,而不会出现任何问题。System.exit(0)将关闭VM并自动删除父类。