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

Odpowiedz Nowy wątek
2013-12-26 13:07

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

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.


Pozostało 580 znaków

2013-12-26 13:10
Moderator

Rejestracja: 11 lat temu

Ostatnio: 3 dni temu

0

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2013-12-26 13:26

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

0

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


Pozostało 580 znaków

Odpowiedz

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