每當我運行我的代碼時,它都會在幾秒鐘內結束。為什么?
這是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();
}
}
}
當我嘗試運行此代碼時,它顯示正在運行,然后代碼以退出代碼 1 結束,這很好,但它只是結束而不顯示視窗。我的 JRE 或 JDK 有問題嗎?
uj5u.com熱心網友回復:
建構式沒有回傳型別。
public void GameWin()不是建構式,因此呼叫了默認建構式,在這里沒有任何意義。應該宣告它public GameWin()。您必須在 Swing 主執行緒中呼叫任何與 Swing 相關的函式以保持一致性。從而
GameWin通過SwingUtilities類呼叫物件的構造。即使它似乎沒有這樣的作業,它可能無法在不同型別的環境中。
因此:
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();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/475923.html
上一篇:repaint()不更新面板?
