Toon posts:

[java] leest oude versie file

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beetje vage topictitel, maar ik kan even niks beters verzinnen.
Het probleem:

code:
1
2
3
4
5
6
7
ImageIcon foto = null;
File f = new File("foto/" + rs.getString("Telefoonnr")+ ".jpg");
if (f.exists()) {
    foto = new ImageIcon("foto/" + rs.getString("Telefoonnr")+ ".jpg");
} else {
    foto = new ImageIcon("anon.png");
}

Dit stukje code maakt een nieuw imageIcon bij om als plaatje in een jbutton te gooien.
Nu heb ik een webcam foto functie gemaakt die dit plaatje
code:
1
foto/[bestandsnaam].jpg
overschrijft. Zodra dat gebeurt gooi ik de JPanel weg waar bovenstaande code in staat en maak ik hem opnieuw aan (nog niet automatisch, dus "te snel lezen" is het niet). Maar op de een of andere manier krijg ik dan weer net zo hard mijn oude plaatje terug :? Bovenstaande functie wordt echt opnieuw uitgevoerd, dat heb ik gecontroleerd dmv println's erin te zetten.
Het stomme is ook nog, als ik m'n plaatje verwijder ipv overschrijf, werkt het wel! Voor de duidelijkheid, het plaatje wordt echt overschreven. Als ik het plaatje open met een image viewer krijg ik het juiste plaatje te zien.
Zodra ik mijn hele programma opnieuw opstart zie ik wel het nieuwe plaatje.
Het lijkt alsof new ImageIcon("foto"); een plaatje uit een cache trekt ofzo, ipv hem echt opnieuw in te lezen.
Dit is de code die ik gebruik om mijn plaatje te schrijven (en werkt ook):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//controleren of er al een foto bestaat
File f = new File("foto/" + jtf.getText() + ".jpg");
if(f.exists() && !asked) {
    //bestand bestaat al!
    message.setText("Er bestaat al een foto voor deze gebruiker!");
    ok.setText("Overschrijven");
    jtf.setEnabled(false);
    asked = true;
} else {
    try {
        //plaatje verkleinen, ik wil een thumbnail
        BufferedImage scaledImage = new BufferedImage(160, 120, BufferedImage.TYPE_INT_RGB );
        Graphics2D gScaledImage = scaledImage.createGraphics();
        gScaledImage.setRenderingHint( RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED );
        gScaledImage.drawImage(bimg, 0, 0, 160, 120, null );
        //plaatje opslaan
        ImageIO.write(scaledImage, "jpg", f);
        message.setText("Afbeelding succesvol opgeslagen.");
    } catch (Exception er) {
        message.setText("Fout bij het opslaan van afbeelding!");
    }
}

Ik programmeer met Eclipse onder Windows XP. Java versie 1.5 update 6.
Iemand een idee wat hier fout gaat?

[ Voor 20% gewijzigd door Verwijderd op 19-06-2006 22:47 ]


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 10-02 15:53

Thyzz

-=leeg=-

Als het opslaan van het plaatje werkt, heb je dan ook de code die je JPanel verwijdert/vernieuwt?

5325wp


Verwijderd

Topicstarter
Die heb ik, maar is imo niet echt spannend:
code:
1
2
3
4
5
6
7
8
9
//Telefoon menu
private JPanel callMenu() {
    //maak het callmenu jpanel aan
    callmenu = new JPanel(new GridLayout(1,1));
    TelephonePanel tp = new TelephonePanel(this);
    callmenu.add(tp);
    callmenu.setVisible(true);
    return callmenu;
}

Waarbij de probleemcode aangeroepen wordt in de constructor van TelephonePanel.

Dit werkt wel, want als ik m'n plaatje verwijder doet de boel het wel.

edit:
voor de duidelijkheid, ik overschrijf niet het object "foto", maar het bestand op de harddisk.

[ Voor 20% gewijzigd door Verwijderd op 19-06-2006 22:47 ]


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
Verwijderd schreef op maandag 19 juni 2006 @ 22:21:
Beetje vage topictitel, maar ik kan even niks beters verzinnen.
Het probleem:

code:
1
2
3
4
5
6
7
ImageIcon foto = null;
File f = new File("foto/" + rs.getString("Telefoonnr")+ ".jpg");
if (f.exists()) {
    foto = new ImageIcon("foto/" + rs.getString("Telefoonnr")+ ".jpg");
} else {
    foto = new ImageIcon("anon.png");
}
Voeg je die foto ook weer aan je JPanel toe, of gebruik je het oude foto object?

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Sluit je de nieuwe file wel? Dat kan belangrijk zijn als er nog iets in de buffer zit.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 27-01 23:32

SilentStorm

z.o.z

Klinkt mij toe als een probleem met caching; ik meen dat er een functie was om een plaatje hard opnieuw in te laden nadat je hem op schijf vervangen hebt. (foto.reload(), repaint(), reset(), re... zoiets?)

Je zou ook zelf een mediatracker om het plaatje heen kunnen hangen en het laden ervan aanpassen aan je eigen wensen.

Localhost is where the heart is


Verwijderd

Topicstarter
SilentStorm schreef op dinsdag 20 juni 2006 @ 01:08:
Klinkt mij toe als een probleem met caching; ik meen dat er een functie was om een plaatje hard opnieuw in te laden nadat je hem op schijf vervangen hebt. (foto.reload(), repaint(), reset(), re... zoiets?)
dat was hem :)

code:
1
2
foto = new ImageIcon("foto/" + rs.getString("Telefoonnr")+ ".jpg");
foto.getImage().flush();


Nu geeft hij wel het goede plaatje weer :)
Pagina: 1