微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

getClass().getResourceAsStream() 的问题

如何解决getClass().getResourceAsStream() 的问题

我正在制作一个带有图形环境的项目,该项目使用文件中的缓冲图像。我进行了搜索,在导出 jar 后,我使用的方式(Java.IO 文件)不起作用,而使用 getClass().getResourceAsstream()方法是,但我在找出文件路径时遇到了麻烦

这是我在 eclipse-IDE 中的文件

files

有些人说我应该将我的资源文件夹移动到 src 中 但我仍然不知道 res 中 image1.png 的文本是什么

我确实尝试过搜索和实施,但这给了我错误

https://pastebin.com/MChSyWH5 这是我尝试绘制图像的类是如何在没有实现 getClass().getResourceAsstream() 的情况下进行的:

package src;



import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;







public class Menu {
    
    
    public Rectangle Playbutton = new Rectangle( Game.WIDTH/2-25,60,50,10);
    public Rectangle Exitbutton = new Rectangle( Game.WIDTH/2-25,80,10);
    public static String desc = null;
    
    private BufferedImage imagePlay;
    private BufferedImage players1;
    private BufferedImage players2;
    private BufferedImage imageExit;
    private BufferedImage IMPOSSIBLE;
    private BufferedImage Hard;
    private BufferedImage Easy;
    private BufferedImage normal;
    private BufferedImage imageTitle;
    private BufferedImage imageResume;
    private BufferedImage imageMain;
    private BufferedImage OPTIONS;
    private BufferedImage BACK;
    public static int brightloss = 0;
    public static int stibaum = 0;
    public static boolean sti = true;
    public static boolean showc = false;
    public static enum STATE{
        MAIN,P1P2,INGAME,DIFICULTY,OPTIONS
        
    };
    public static STATE State = STATE.MAIN;
    InputStream input = null;
    public static  STATE Statepre = State;
    public static boolean dark = true;
    public static Slider slider;
    
    public static void SAVESTATE(){
        Statepre = State;
        
        
    }

    public Menu() {
        
     try {
        input = new FileInputStream("res/Playbutt.png");
        } catch (IOException e) {
            e.printstacktrace(); 
        }
     
         String current;
        try {
            
        current = new java.io.File( "." ).getCanonicalPath();
         System.out.println("Current dir:"+current);
          String currentDir = System.getProperty("user.dir");
                 System.out.println("Current dir using System:" +currentDir);
                
        } catch (IOException e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }
        
        slider = new Slider(100,100,false,brightloss);
        
        System.out.println(new File("res/Playbutt.png").getAbsolutePath()+"-arquivo");
        System.out.println(new File("/res/Playbutt.png").exists()+"-arquivo2");
       try { // ImageIO.read(new File("res/Playbutt.png"));              
          imagePlay = ImageIO.read(input);
          IMPOSSIBLE = ImageIO.read(new File("res/IMPOSSIbutt.png"));
          Hard = ImageIO.read(new File("res/Hardbutt.png"));
          Easy = ImageIO.read(new File("res/Easybutt.png"));
          normal = ImageIO.read(new File("res/normalbutt.png"));
          players1 = ImageIO.read(new File("res/1P.png"));
         
          players2 = ImageIO.read(new File("res/2P.png"));
          imageExit = ImageIO.read(new File("res/Exitbutt.png"));
          imageTitle = ImageIO.read(new File("res/Title.png"));
          imageResume = ImageIO.read(new File("res/Resumebutt.png"));
          imageMain = ImageIO.read(new File("res/Mainbutt.png"));
          OPTIONS = ImageIO.read(new File("res/Optbutt.png"));
          BACK = ImageIO.read(new File("res/Backbutt.png"));
       } catch (IOException ex) {
            // handle exception...
       }
    }
    

    
    
    public void render(Graphics g) {
        
        g.setFont(new Font("DefaultFont",Font.PLAIN,10));
        g.setColor(Colors.Trans_GREEN3);
        g.fillRect(0,Game.HEIGHT-10,Game.WIDTH,10);
        g.fillRect(0,Game.HEIGHT-9,9);
        g.fillRect(0,Game.HEIGHT-8,8);
        g.fillRect(0,Game.HEIGHT-7,7);
        g.fillRect(0,Game.HEIGHT-6,6);
        g.fillRect(0,Game.HEIGHT-5,5);
        g.setColor(Colors.Trans_GREEN3);
        g.fillRect(0,10,Game.HEIGHT);
        g.fillRect(0,9,8,7,6,5,Game.HEIGHT);
        g.setColor(Colors.Trans_GREEN3);
        g.setColor(Colors.Trans_GREEN3);
        g.fillRect(Game.WIDTH-10,Game.HEIGHT);
        g.fillRect(Game.WIDTH-9,Game.HEIGHT);
        g.fillRect(Game.WIDTH-8,Game.HEIGHT);
        g.fillRect(Game.WIDTH-7,Game.HEIGHT);
        g.fillRect(Game.WIDTH-6,Game.HEIGHT);
        g.fillRect(Game.WIDTH-5,Game.HEIGHT);
        
        Graphics2D g2d = (Graphics2D) g;
        
        if(State==STATE.MAIN) {
            
                if(MouseInput.mx>=95 && MouseInput.mx<=145) { 
                     if(MouseInput.my>60&&MouseInput.my<70) {
                         g.setColor(Colors.outline);
                    g.fillRect(Game.WIDTH/2-26,59,54,14);
                    
                    
                    
                    }
                     else if(MouseInput.my>80&&MouseInput.my<90) {
                         g.setColor(Colors.outline);
                         g.fillRect(Game.WIDTH/2-26,79,14);
                         
                         }
                     else if(MouseInput.my>40&&MouseInput.my<50) {
                         g.setColor(Colors.outline);
                         g.fillRect(Game.WIDTH/2-26,39,14);
                         desc=("");
                         g.setColor(Color.green);
                         g.drawString(desc,45,Game.HEIGHT/2+50);
                     }
                }
         g2d.drawImage(this.imageTitle,200,null);
         g2d.drawImage(this.OPTIONS,Game.WIDTH/2-25,null);
         g2d.drawImage(this.imagePlay,40,null);
         g2d.drawImage(this.imageExit,null);
         
         double locationX = imageTitle.getWidth() / 2;
         double locationY = imageTitle.getHeight() / 2;
         AffineTransform tx = AffineTransform.getRotateInstance((Math.toradians(stibaum)),locationX,locationY);
         AffineTransformOp op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);

            AffineTransform old = g2d.getTransform();
            
            g2d.drawImage(op.filter(imageTitle,null),Game.WIDTH/2-50,null);
            
            g2d.setTransform(old);
            //things you draw after here will not be rotated
         }
        
        else if(State==STATE.INGAME) {
            if(MouseInput.mx>=95 && MouseInput.mx<=145) {
                 if(MouseInput.my>70&&MouseInput.my<80) {
                     g.setColor(Colors.outline);
                     g.fillRect(Game.WIDTH/2-26,69,14);
                
                }
                 else if(MouseInput.my>90&&MouseInput.my<100) {
                     g.fillRect(Game.WIDTH/2-26,89,14);
                     }else if(MouseInput.my>50&&MouseInput.my<60) {
                         g.setColor(Colors.outline);
                         g.fillRect(Game.WIDTH/2-26,49,14);
                         
                     }
                 
            }
            g2d.drawImage(this.imageResume,70,null);
            g2d.drawImage(this.imageMain,null);
            g2d.drawImage(this.imageExit,90,null);
             g2d.drawImage(this.imageTitle,null);}
        
        else if(State==STATE.P1P2) {
            if(MouseInput.mx>=15 && MouseInput.mx<=40) {
                 if(MouseInput.my>=106&&MouseInput.my<118) { 
                     g.setColor(Colors.outline);
                     g.fillRect(14,Game.HEIGHT-29,28,15);
                     desc=("");
                     g.setColor(Color.green);
                     g.drawString(desc,Game.HEIGHT/2+50);
                     
                 }}
            if(MouseInput.my>30&&MouseInput.my<90) {
                 if(MouseInput.mx>=60 && MouseInput.mx<=120) {
                     g.setColor(Colors.outline);
                     g.fillRect(Game.WIDTH/2-61,29,66,66);    
                
                     
        }
                 if(MouseInput.mx>=130 && MouseInput.mx<=190) {
                     g.setColor(Colors.outline);
                     g.fillRect(Game.WIDTH/2+9,66);
                        
                     
        }}
            g2d.drawImage(this.players1,Game.WIDTH/2-60,30,null);
            g2d.drawImage(this.players2,Game.WIDTH/2+10,null);
            g2d.drawImage(this.BACK,15,Game.HEIGHT-28,null);
        }
        else if(State==STATE.DIFICULTY) {
            if(MouseInput.mx>=15 && MouseInput.mx<=40) {
                 if(MouseInput.my>=106&&MouseInput.my<118) { 
                     g.setColor(Colors.outline);
                     g.fillRect(14,Game.HEIGHT/2+50);
                     
                 }}
            if(MouseInput.mx>=95 && MouseInput.mx<=145) {
                 if(MouseInput.my>70&&MouseInput.my<80) {
                     g.setColor(Colors.outline);
                     g.fillRect(Game.WIDTH/2-26,14);
                     g.setColor(Color.green);
                     desc=("for those who want challenge");
                     g.drawString(desc,Game.HEIGHT/2+50);
                
                }
                 else if(MouseInput.my>90&&MouseInput.my<100) {
                     g.setColor(Colors.outline);
                     g.fillRect(Game.WIDTH/2-26,14);
                     desc=("for those who want to cry");
                     g.setColor(Color.green);
                     g.drawString(desc,Game.HEIGHT/2+50);
                     }else if(MouseInput.my>50&&MouseInput.my<60) {
                         g.setColor(Colors.outline);
                         g.fillRect(Game.WIDTH/2-26,14);
                         desc=("for those who want to play casually");
                         g.setColor(Color.green);
                         g.drawString(desc,Game.HEIGHT/2+50);
                         
                         
                     }if(Ball.pmih) {
                      if(MouseInput.my>33&&MouseInput.my<44) {
                         g.setColor(Colors.outline);
                         g.fillRect(Game.WIDTH/2-26,32,14);
                         desc=("for those who don't really have a life");
                         g.setColor(Color.green);
                         g.drawString(desc,Game.HEIGHT/2+50);
                     }}
                 
            }
            if(Ball.pmih) {
            g2d.drawImage(this.IMPOSSIBLE,33,null);}
            g2d.drawImage(this.normal,null);
            g2d.drawImage(this.Easy,null);
            g2d.drawImage(this.Hard,null);
            g2d.drawImage(this.imageTitle,null);
             g2d.drawImage(this.BACK,null);
            
            
                
                     
        }
        else if(State==STATE.OPTIONS) {
            if(MouseInput.mx>=15 && MouseInput.mx<=40) {
                 if(MouseInput.my>=106&&MouseInput.my<118) { 
                     g.setColor(Colors.outline);
                     g.fillRect(14,Game.HEIGHT/2+50);
                     
                 }}
            
            
            
            
            slider.render(g);
             g2d.drawImage(this.imageTitle,null);
        
             
        }
        
        
    }




    public void tick() {
        slider.tick();
        if(stibaum<5&&sti==true) {
            stibaum+=1;
        }
        if(stibaum>=5&&sti==true) {sti=false;}
        if(stibaum>-5&&sti==false) {
            stibaum-=1;
        }
        if(stibaum<=-5&&sti==false) {sti=true;}
        if(State==STATE.OPTIONS) {
            Statepre=STATE.MAIN;
        }
        else if(State==STATE.P1P2) {
            Statepre=STATE.MAIN;
        }
        else if(State==STATE.DIFICULTY) {
            Statepre=STATE.P1P2;
        }
        
    }
    
    
}

解决方法

input = new FileInputStream("res/Playbutt.png");

这不起作用。您不能使用 FIS,您必须使用 Menu.class.getResource。不是getClass()

ImageIO.read(new File("res/2P.png"));

这里也一样。

} catch (IOException ex) {
     // handle exception...
}

这不是你做这些事情的方式。摆脱这一切,并将 throws IOException 添加到构造函数中。 public static void main 可以并且通常应该声明为 throws Exception。您忽略了错误,因此更难调试此问题。因此,不要这样做。

您的代码均未尝试使用 Main.class.getResource

res 未在您的 Eclipse 项目中标记为源目录。你需要解决这个问题。您有 2 个选择:

  1. 忘记 res 目录。将图像放在与 java 文件完全相同的位置。只需将它们移到那里 - 然后 getResource 就可以正常工作。例如,如果 img.pngMain.java 位于同一目录(完全相同的目录!),则 Main.class.getResource("img.png") 将正常工作。

  2. 使用 maven,然后将此项目更改为基于 maven 的项目。然后eclipse会照顾它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。