Jframe没有处置

时间:2014-05-28 02:29:17

标签: java image swing nullpointerexception jframe

所以我正在使用Ready for Java开发基于文本的游戏。我能够找到一种方法将图像放在屏幕上,但是当我尝试使用frame.dispose();删除图像时,它会给我一个NullPointerException

我试过寻找答案,但我没有找到任何答案。任何人都可以伸出援手吗?

// The "Pics" class.
import java.awt.*;
import hsa.Console;
import javax.swing.*;

public class Pics extends JPanel
{
static JFrame frame;
static String Continue;


    public static void Screens (String jail_time)
    {
        JFrame frame = new JFrame ("JFrame"); //the pictures

        frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
        frame.setSize (773, 480);
        JLabel jl = new JLabel (new ImageIcon (jail_time));
        frame.getContentPane ().add (jl);
        frame.setVisible (true);
        frame.pack ();
    }

    static Console c;           // The output console

    public static void main (String[] args)
    {
        c = new Console (30, 60);
        Screens ("guard2.jpg");// the first picture
        Continue = c.readString ();
        frame.dispose (); 
        Screens ("Jail copy.jpg");//the second picture

        // Place your program here.  'c' is the output console
    } // main method
} // Pics class

4 个答案:

答案 0 :(得分:3)

不要shadow“框架”变量。

您将变量定义为实例变量,该变量为null,然后再将其定义为局部变量。摆脱局部变量:

//JFrame frame = new JFrame ("JFrame"); //the pictures
frame = new JFrame ("JFrame"); //the pictures

另外,你班级的整体结构是错误的。您不应该使用静态变量和方法。这是设计糟糕的课程的标志。

答案 1 :(得分:2)

你有一个阴影问题......

首先,您声明对static ...

frame引用
static JFrame frame;

然后在您的static Screens方法中,创建frame的本地实例并构建您的用户界面...

public static void Screens (String jail_time)
{
    // Local reference here...
    JFrame frame = new JFrame ("JFrame"); //the pictures

这意味着当您尝试在main中引用它时,它仍然是null ...

public static void main (String[] args)
{
    Screens ("guard2.jpg");// the first picture
    // I'm still null...
    frame.dispose ();

尝试删除Screens

中的本地声明
public static void Screens (String jail_time)
{
    //JFrame frame = new JFrame ("JFrame"); //the pictures
    frame = new JFrame ("JFrame"); //the pictures

另外,请查看Initial Threads并确保在Event Dispatching Thread的上下文中创建UI。

答案 2 :(得分:1)

您正在隐藏您的班级成员JFrame frame,这会使其保持未初始化状态,并在您尝试调用班级成员框架时随时生成NullPointerException。而不是

JFrame frame = new JFrame ("JFrame"); 

待办事项

frame = new JFrame ("JFrame"); 

答案 3 :(得分:0)

在主要方法的第一行,更改

JFrame frame = new JFrame(" JFrame"); //图片

frame = new JFrame(" JFrame");