Imageio.IioException: kan geen invoerbestand lezen

Ik ben een week geleden begonnen met Java, en nu wil ik een afbeelding in mijn raam invoegen.
Wat ik ook probeer, ik blijf dit in Eclipse:
Javax.imageio.IioException: Kan invoerbestand niet lezen!

package graphics;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import src.Common;
public class Window extends JFrame
{
public class Panel extends JPanel
{
    public void paintComponent(Graphics g)
    {
        Image img; 
        try 
        {
        img = ImageIO.read(new File("/logo.jpg"));
        g.drawImage(img, 0, 0, this);
        } 
        catch (IOException e) 
        {
        e.printStackTrace();
        }
    }
}
public Window(String title, int width, int height)
{
    this.setTitle(title);
    this.setSize(width, height);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setContentPane(new Panel()); 
    this.setVisible(true);
}

}

Ik denk dat de code behoorlijk is uitgelegd.
Ik heb geprobeerd het probleem op te lossen met dit , , en dat .

Wat ik probeer te doen is een desktop-programma en mijn bronnen worden zo opgeslagen:
Training / SRC / Graphics / Window
TRAINING / SRC / SRC / MAIN

Ik heb de afbeelding gedaan die ik in elke map wil lezen en nog steeds het probleem krijgen: /

Wat heb ik verkeerd gedaan?

Edit Eindelijk opgelost, hier het antwoord

Mooie koe gaf me de link die hielp.
Dus ik heb mijn afbeeldingen in een map geplaatst en verander de manier om er toegang toe te hebben, zoals beschreven in de link.

getClass().getResource("/images/yourImageName.extension");

Antwoord 1, Autoriteit 100%

Heb je geprobeerd new File("logo.jpg");(zonder de toonaangevende /)?

En weet het zeker, het logo.jpg wordt gekopieerd naar uw uitvoer? (Sommige ID’s kopiëren niet elk bestand van uw bronmappen naar uw uitvoeringsmappen (of doel).)

/src
|-> Window.java
|-> Logo.jpg

wordt

/out
|-> Window.class

(Merk op dat de IDE / Compiler de afbeelding niet kopieert naar uw uitvoermap en zodat de gecompileerde code de afbeelding niet kan vinden – hoewel u het juiste pad hebt opgegeven)


Antwoord 2, Autoriteit 55%

Probeer Debug met welke bestandsbron u daadwerkelijk probeert te openen . Eerste stap zou zijn om uw new File("/logo.jpg").get [Canonical]Path()en druk deze af op System.out(OF WORDAF in de debugger). Ik denk dat het probleem de /vóór logo.jpg, welke wijst naar uw hoofdmap (bijv. C 🙂 en uw bestand is er niet, maar dat doe ik niet Ken uw bestandsopstelling in detail.


Antwoord 3, Autoriteit 36%

Het probleem is dat u niets voor het beeld kijkt, dus het zoekt een map die er niet is om het te vinden.

U moet een map maken om de afbeeldingen in uw project op te slaan en bel dan naar deze, uw mapnaam voor de beeldnaam. b.g

ImageIO.read(new File("Folder/Image.png"));

Anders kunt u de afbeelding vinden door door de hele map te gaan, wat niet een goede manier is, want het duurt langer en wanneer u uw project verplaatst, is het geen werkverbinding als de map anders zal zijn. Bijvoorbeeld:

ImageIO.read(new File("D:/eclipse/Workspace/Project/Folder/Image.png"));

Een map in uw project maken, dus het is op hetzelfde niveau als de bronmap in de map en bel deze voor de afbeelding, zoals SO:

Mapstructuur;

Instellingen

SRC

Beeldomslag

Bin


Antwoord 4, Autoriteit 9%

Copospasting van een werkproject:

 private JPanel getPanel() {
    JPanel panel = new JPanel();
    JLabel labelLcl = new JLabel("Ye ana!");
    try {
        File f = new File("./src/res/0.jpg");
        //l.a(f.getCanonicalPath());
        BufferedImage imgLcl = ImageIO.read(f);
        ImageIcon iconLcl = new ImageIcon(imgLcl);
        labelLcl.setIcon(iconLcl );
        panel.add(labelLcl);
  } catch (IOException e) {
       e.printStackTrace();
  }
    return panel;
}

Anders kunt u map / bestand lezen Machtigingsprobleem

Other episodes