首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法调用"java.net.URL.toExternalForm()“,因为”位置“为空Java Graphics2D

无法调用"java.net.URL.toExternalForm()“,因为”位置“为空Java Graphics2D
EN

Stack Overflow用户
提问于 2022-11-23 16:07:14
回答 1查看 398关注 0票数 0

我有问题,检测我的图像,它总是说,它的位置,它的零码,做什么。我需要叫这个图像。我已经试过很多事情了,但还是弄不清楚。我尝试过在资源包中,在另一个包中,使用完整的路径,但是如果。

代码语言:javascript
运行
复制
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package game.objeto;

import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.net.URL;
import javax.swing.ImageIcon;

/**
 *
 * @author sousa
 */
public class Player {
    
    public Player(){
       
        this.image=new ImageIcon(getClass().getResource("resources/plane.png")).getImage();
        this.image_speed=new ImageIcon(getClass().getResource("resources/plane_speed.png")).getImage();
    }
    
    
    public static final double PLAYER_SIZE=64;
    private double x;
    private double y;
    private float angle=0f;
    private final Image image;
    private final Image image_speed;
    
    public void changeAngle(float angle){
        if(angle<0){
            angle=359;
            
        }else if(angle>359){
            angle=0;
        }
        this.angle=angle;
    }
    
    public void draw(Graphics2D g2){
        AffineTransform oldTransform = g2.getTransform();
        g2.translate(x, y);
        g2.drawImage(image, 0,0,null);
        
        
        g2.setTransform(oldTransform);
    }
    
    public double getX(){
        return x;
    }
    
    public double getY(){
        return y;
    }
    
    public float getAngle(){
        return angle;
    }
}

而错误是

代码语言:javascript
运行
复制
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.net.URL.toExternalForm()" because "location" is null
    at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:232)
    at game.objeto.Player.<init>(Player.java:22)
    at game.componentes.PanelGame.initObjectGame(PanelGame.java:74)
    at game.componentes.PanelGame.start(PanelGame.java:69)
    at game.main.Main$1.windowOpened(Main.java:35)
    at java.desktop/java.awt.Window.processWindowEvent(Window.java:2082)
    at java.desktop/javax.swing.JFrame.processWindowEvent(JFrame.java:298)
    at java.desktop/java.awt.Window.processEvent(Window.java:2044)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4991)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4823)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
------------------------------------------------------------------------

Thx预先

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 16:15:31

这是因为您使用.getClass()进行非静态引用来获取资源URL。您必须使用使用Player.class的静态引用。此外,如果/resources已定义为项目中的源文件夹,则不需要将图像路径与该源文件夹路径放在前面。

试试这个:

代码语言:javascript
运行
复制
public Player(){
    this.image = (new ImageIcon(Player.class.getResource("/plane.png")).getImage());
    this.image_speed = (new ImageIcon(Player.class.getResource("/plane_speed.png")).getImage());
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74549838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档