想做游戏的小白 2022-03-02 20:03 采纳率: 80%
浏览 70
已结题

java--为什么在代码编辑器上可以运行的,打包成jar就不能了。

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","恐吓");
    }
}

文件结构:

img

在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)

  • 写回答

1条回答 默认 最新

  • 想做游戏的小白 2022-03-02 20:05
    关注

    在IDEA可以显示出图片,也可以打开音频,不过打包成jar就必须了,但是可以显示三个字符:“图片:”

    评论

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画