-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 ActionListenersetVisible

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

あなたが言ったエラーは、実行時エラーではなく、コンパイル エラーです。ファイルをコンパイルすることさえできません。コードの以前のコンパイル済みバージョンを実行しているようです。このエラーがスローされている行を投稿できますか? もしそうなら、私は私の答えを改善することができます。このエラーは、静的メンバーがオブジェクトではなくクラスに属しているため、静的メンバー内のオブジェクトの状態を変更できないため、静的コンテキスト内の非静的メンバーにアクセスしようとすると発生します。コードで奇妙なことをしています... TitleScreen を JFrame に追加しましたが、その後 (コンテンツ ペインを介して) 再度実行し、TitleScreen をフレームのコンテンツ ペインとして設定しました。あなたはSwingが初めてのようです。私は正しいですか?

于 2012-07-29T01:56:20.330 に答える