所以我正在使用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
答案 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");