MyFrame类:
package main;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyFrame extends Frame{
public MyFrame(String path,String Name) {
// 默认的窗体名称
this.setTitle(Name);
// 获得面板的实例
MyPanel panel = new MyPanel(path);
this.add(panel);
this.addWindowListener(new WindowAdapter() {
//设置关闭
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 执行并构建窗体设定
this.pack();
this.setVisible(true);
}
}
Mypenel类:
package main;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import java.util.Objects;
import javax.swing.ImageIcon;
public class MyPanel extends Panel{
private final Image screenImage = new BufferedImage(800, 600, 2);
private final Graphics2D screenGraphic = (Graphics2D) screenImage
.getGraphics();
private Image backgroundImage;
public MyPanel(String path) {
loadImage(path);
// 设定焦点在本窗体
setFocusable(true);
// 设定初始构造时面板大小,这里先采用图片的大小
setPreferredSize(new Dimension(800,600));
// 绘制背景
drawView();
}
/**
* 载入图像
*/
private void loadImage(String path) {
//获得当前类对应的相对位置image文件夹下的背景图像
ImageIcon icon = new ImageIcon(Objects.requireNonNull(getClass().getResource(path)));
//将图像实例赋给backgroundImage
backgroundImage = icon.getImage();
}
private void drawView() {
screenGraphic.drawImage(backgroundImage, 0, 0, null);
}
public void paint(Graphics g) {
g.drawImage(screenImage, 0, 0, null);
}
}
以上这两个类是为了能显示图片。
主类:
package main;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class games01 {
//打开音乐
public static void openFile(String filePath) {
try {
File file = new File(filePath); // 创建文件对象,路径为filePath
Desktop.getDesktop().open(file); // 启动已在本机桌面上注册的关联应用程序,打开文件对象file。
} catch (IOException | NullPointerException e) { // 异常处理
e.printStackTrace();
}
}
//显示带有颜色的窗口(400,400,200,200,颜色大写(Color.大写字母颜色))
//红色窗口:new myFrame(500,100,400,400,Color.RED);
static class myFrame extends Frame {
static int id = 0;//可能存在多个窗口,我们需要一个计数器
public myFrame(int x, int y, int w, int h, Color color) {
super("myFrame" + (++id));
setBackground(color);
this.addWindowListener(new WindowAdapter() {
//设置关闭
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(x, y, w, h);
setVisible(true);
}
}
public static void main(String[] args) {
// Start();
System.out.println("图片:");
new MyFrame("../ImageWav/恐怖图片01.jpg","图片");
System.out.println("音频:");
openFile("./Games001/src/ImageWav/音乐01.wav");
System.out.println("半成品");
}
public static void Start() throws Exception {
System.out.println("欢迎来到此《谜》");
Thread.sleep(1000);
System.out.println(
"[某一天,主角散步时,不小心有东西掉在马路上,他跑回去捡,却不小心被撞昏了过去。\n" +
"等他一醒来,便身处在这个鬼实验楼的房间里。]");
Thread.sleep(1000);
System.out.println(".......");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入你的名字:");
new MyFrame("../ImageWav/恐怖图片01.jpg","恐吓");
}
}
文件结构:
在IDEA没报错。
在运行jar包中报错如下:
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Unknown Source)
at main.MyPanel.loadImage(MyPanel.java:39)
at main.MyPanel.(MyPanel.java:25)
at main.MyFrame.(MyFrame.java:15)
at main.games01.main(games01.java:41)