JFrame 在某个时间结束

JFrame ending in some time

每当我 运行 我的代码都会在几秒钟内结束。为什么?

这是 Main 文件:

public class Main {
    public static void main(String[] args) {
        System.out.println("This is running");
        GameWin Win = new GameWin();
    }
}

这是 GameWin 文件:

import java.awt.event.*;
import javax.swing.*;

public class GameWin implements ActionListener{

JFrame frame = new JFrame();
JButton myButton = new JButton("New Window");

public void GameWin(){

    myButton.setBounds(100,160,200,40);
    myButton.setFocusable(false);
    myButton.addActionListener(this);

    frame.add(myButton);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(420,420);
    frame.setLayout(null);
    frame.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent e) {

    if(e.getSource()==myButton) {
        frame.dispose();
    }
}
}

当我尝试 运行 此代码时,它显示 运行ning,然后代码以退出代码 1 结束,这很好,但它只是结束而没有显示 window。我的 JRE 或 JDK 有问题吗?

  1. 构造函数没有 return 类型。 public void GameWin() 不是构造函数,因此默认构造函数被调用,这里没有任何有趣的事情。应该声明为 public GameWin().

  2. 为了保持一致性,您必须调用Swing-main-thread中的任何Swing-related函数。从而通过SwingUtilitiesclass调用GameWin对象的构造。即使它看起来没有这样的工作,它可能不会在不同类型的环境中。

因此:

import java.awt.event.*;
import javax.swing.*;

public class GameWin implements ActionListener{

  public static void main(String[] args) {
    System.out.println("This is running");
    SwingUtilities.invokeLater(() -> new GameWin());
  }
  
  JFrame frame = new JFrame();
  JButton myButton = new JButton("New Window");

  public GameWin(){               
    myButton.setBounds(100,160,200,40);
    myButton.setFocusable(false);
    myButton.addActionListener(this);   
    frame.getContentPane().add(myButton);   
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(420,420);
    frame.setLayout(null);
    frame.setVisible(true);   
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if(e.getSource()==myButton) {
      frame.dispose();          
    }       
  }
}