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并自动删除父类。