Zapis .jpg do pliku. Serializacja, strumienie, przechowywanie obiektów różnego typu.

0

W poniższym programie pojawia się błąd związany ze strumieniem ObjectinputStream:
"java.io.FileInputStream.<init>(Unknown Source)"
Celem programu jest zapis pliku laska.jpg do pliku plik.dat, a następnie jego wydobycie z plik.dat i wyrysowanie w ramce.
Poniżej 3 klasy, mające realizować to zadanie:

KLASA 1:

import java.io.IOException;

public class Body {
    
    public static void main(String[] args) throws IOException {
        
        Ramka okno = new Ramka();
        okno.setVisible(true);
        
    }

}

KLASA 2:

 
import java.awt.Container;
import java.io.IOException;

import javax.swing.JFrame;

public class Ramka extends JFrame {
    
    public Ramka() throws IOException{
        
        setSize(1000, 600);
        Container cont = getContentPane();
        cont.add(new Panel());
        
    }

}

KLASA 3:

 
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Panel extends JPanel implements Serializable {
    
    public Panel() throws IOException{
        File plikWe = new File("laska.jpg");
        File plikWy = new File("plik.dat");
        
        FileOutputStream fos = new FileOutputStream(plikWe);
        ObjectOutputStream oas = new ObjectOutputStream(fos);  
        oas.writeObject(plikWy);                                   // zapis obiektu do pliku
        oas.close();
        
    }
    
    public File wczytajObiekt() throws IOException, ClassNotFoundException{
        
        File plikWy2 = new File("plik.dat");
    
        FileInputStream fis = new FileInputStream(plikWy2);
        ObjectInputStream ois = new ObjectInputStream(fis);
        File plikG = (File) ois.readObject();                     // odczyt obiektu z pliku
        
        ois.close();
        return plikG;
    }
    
    
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        try {
            BufferedImage doNarysowania = ImageIO.read(wczytajObiekt());
            g2.drawImage(doNarysowania, 0, 0, 1000, 600, null);
            
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    
    

}


Gdzie popełniam błąd? Może cała koncepcja jest zła?

W załączniku laska.jpg.

0

W taki sposób nie zapiszesz obrazka, klasa BufferedImage nie implementuje interfejsu Serializable.

0

Faktycznie. Całkiem źle. Dzięki za odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1