-1

我正在尝试为游戏创建标题屏幕。到目前为止一切都很好,除了这个 JFrame 拒绝关闭。我在不同 JFrame 中的不同 JPanel 中使用 JButton。我得到错误

“无法从类型 Window 对非静态方法 setVisible(boolean) 进行静态引用”

package ZombieFunTimeGo;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

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

public class SuperZombieFunTimeGo extends JFrame{

    private TitleScreen ts;
    boolean visible;

    public SuperZombieFunTimeGo() {
        add(new TitleScreen());
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(1280, 720);
        ts = new TitleScreen();
        Container pane = getContentPane();
        pane.add(ts);
        setContentPane(ts);
        setLocationRelativeTo(null);
        setTitle("Super Zombie Fun Time Go!");
        setResizable(false);
        setVisible(true);
    }

    public void pullThePlug() {
        WindowEvent wev = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
        Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);
    }

    public static void main(String[] args) {
        new SuperZombieFunTimeGo();
    }
}
4

2 回答 2

1

是的,您在问题中发布的代码完全无关紧要。您在评论中发布的代码是导致问题的代码

startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new theActualGame(); SuperZombieFunTimeGo.setVisible(false); } });

问题是您调用该setVisible方法,因为它是静态方法,但事实并非如此。SuperZombieFunTimeGo 您应该只在实例上调用该方法。在这种情况下,您ActionListener将需要对该实例的引用,并调用setVisible该实例。所以像

SuperZombieFunTimeGo titleScreen = ...;
...
startButton.addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) { 
     new theActualGame();
     titleScreen.setVisible(false); } 
});
于 2012-07-29T16:51:38.503 回答
1

您说的错误是编译错误,而不是运行时错误。您甚至无法编译该文件。您似乎正在执行代码的先前编译版本。您可以发布抛出此错误的行吗?如果是这样,我可以改进我的答案。当您尝试访问静态上下文中的某些非静态成员时会发生此错误,因为您无法更改静态成员中的对象状态,因为静态成员属于类,而不是对象。您在代码中做了一些奇怪的事情......您向 JFrame 添加了一个 TitleScreen,但在此之后您又做了一次(通过内容窗格)并将 TitleScreen 设置为框架的内容窗格。看来您是 Swing 的新手。我对吗?

于 2012-07-29T01:56:20.330 回答