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 有问题吗?
构造函数没有 return 类型。 public void GameWin()
不是构造函数,因此默认构造函数被调用,这里没有任何有趣的事情。应该声明为 public GameWin()
.
为了保持一致性,您必须调用Swing-main-thread中的任何Swing-related函数。从而通过SwingUtilities
class调用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();
}
}
}
每当我 运行 我的代码都会在几秒钟内结束。为什么?
这是 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 有问题吗?
构造函数没有 return 类型。
public void GameWin()
不是构造函数,因此默认构造函数被调用,这里没有任何有趣的事情。应该声明为public GameWin()
.为了保持一致性,您必须调用Swing-main-thread中的任何Swing-related函数。从而通过
SwingUtilities
class调用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();
}
}
}