[JAVA] gif afbeelding inladen in JFrame mislukt*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 18-09 15:02

Stekeltje

Nothing to see here move along

Topicstarter
Dit is de eerste keer voor mij dat ik in de dev schuur post, dus ik hoop dat ik hier goed zit.

Klein verhaaltje vooraf, voor school moet ik een java aplicatie schrijven die realtime gegevens van een PLC plukt en deze daarna verwerkt in een visualisatie.

Ik heb dus een aantal afbeeldingen die ik versneld achterelkaar wil laten zien (ik heb gif afbeeldingen die bewegen gemaakt alleen ik weet niet hoe ik die in java kan laten zien (JFrame bijvoorbeeld))

Daarom ben ik eerst iets anders gaan proberen.

Een stukje code uit een boek om te testen. Ik heb deze helemaal exact overgenomen alleen ik dezelfde foutmelding krijgen nadat ik het zaakje heb gecompiled.
Deze namelijk:
Afbeeldingslocatie: http://i102.photobucket.com/albums/m99/Ruudjuh_2006/javafout.jpg

De code is:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class gifjewasmachine extends JFrame
{
    public static void main(String args[])
    {
        JFrame frame = new gifjewasmachine();
        frame.setSize(400,340);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("poging");
        frame.setContentPane(new gifjeswasmachine());
        frame.setVisible(true);
        
    }
}

class gifjeswasmachine extends JPanel
{
    private javax.swing.Timer timer;
    private ArrayList<ImageIcon> lijst;
    private final int AANTAL = 7;
    private int index,volgende;
    private int delay;
    
    private JButton startknop;
    
    public gifjeswasmachine()
    {
        lijst = new ArrayList<ImageIcon>();
        
        for(int i =0; i<AANTAL; i++)
        {
            String bestandsnaam = String.format("IMG%05d.gif,i");
            ImageIcon plaatje = new ImageIcon(bestandsnaam);
            lijst.add(plaatje);
        }
        index = 0;
        volgende = 1;
        delay = 210;
        
        timer = new javax.swing.Timer(delay, new TimerHandler());
        
        startknop = new JButton("Start");
        startknop.addActionListener(new StartHandler());
        add(startknop);
    }
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    setBackground(Color.BLACK);
    ImageIcon plaatje = lijst.get(index);
    plaatje.paintIcon(this,g,100,100);
    }
    class StartHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            timer.start();
        }
    }
    class TimerHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            index = index + volgende;
            if (index<0)
                index = AANTAL-1;
            if (index >= AANTAL)
                index = 0;
            repaint();
        }
    }
}


Mijn vraag is dus, wat is hier fout aan? Is er een makkelijkere manier om (al bewegende afbeeldingen in te laden in zo'n zelfde soort frame?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

De fout zit op regel 36, zoals de foutmelding ook vermeldt:
Java:
1
            String bestandsnaam = String.format("IMG%05d.gif,i"); 

Hint: String.format heeft minimaal twee argumenten...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Kan je via een topicreport Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif bovenin je topic een betere titel "suggesteren". [JAVA] zegt natuurlijk niet zoveel over je probleem ;)

Zie ook: *** Over topictitels in PRG - lezen voor topic openen!!! ***

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 18-09 15:02

Stekeltje

Nothing to see here move along

Topicstarter
CodeCaster schreef op dinsdag 05 januari 2010 @ 15:20:
De fout zit op regel 36, zoals de foutmelding ook vermeldt:
Java:
1
            String bestandsnaam = String.format("IMG%05d.gif,i"); 

Hint: String.format heeft minimaal twee argumenten...

EDIT: ik heb het al gezien. Die ,i moet na het aanhalingsteken staan. Stom stom stom.
Hoe bedoel je, die ,i is toch de 2e?
BtM909 schreef op dinsdag 05 januari 2010 @ 15:21:
Kan je via een topicreport [afbeelding] bovenin je topic een betere titel "suggesteren". [JAVA] zegt natuurlijk niet zoveel over je probleem ;)

Zie ook: *** Over topictitels in PRG - lezen voor topic openen!!! ***
Had ik al gedaan maar bedankt ;).

[ Voor 5% gewijzigd door Stekeltje op 05-01-2010 15:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

...Ruud... schreef op dinsdag 05 januari 2010 @ 15:24:
[...]

Hoe bedoel je, die ,i is toch de 2e?
Dat zou wel zo moeten zijn, maar nu is de 'i' nog onderdeel van de string literal...
M.a.w. "IMG%05d.gif,i" is 1 geheel...

[ Voor 7% gewijzigd door Verwijderd op 05-01-2010 15:26 ]


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 18-09 15:02

Stekeltje

Nothing to see here move along

Topicstarter
Ik had hem net zelf gevonden. Was echt een stomme fout xD.

Maar ik zou nog steeds heel graag willen weten hoe het makkelijker kan want, ik ben anders 4 jaar bezig om de rest te gaan doen. Ik moet namelijk 6 plaatjes totaal helemaal animeren. Die automatisch reageren om een status verandering en er dus ook automatisch mee ophouden.

Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 18-09 15:02

Stekeltje

Nothing to see here move along

Topicstarter
Het gifje inladen was zoals eerder vermeld een test. Ik heb een manier gevonden om het plaatje anders in te laden:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class PlcVisual extends JPanel {
    OpcConnect opc;
    // Image & animatie variabelen
    int posx = 0, posy = 0, hoek = 0, x, x1;
    ImageIcon gif, gif1;

    public PlcVisual(OpcConnect opc) 
    {
        this.opc = opc;
        
        // Layoutmanager uitschakelen
        setLayout(null);    
        gif = new ImageIcon("aluminium(1).gif");
        gif1 = new ImageIcon("aluminium(2).gif");   

    }
    public void paintComponent(Graphics g) 
    {
        // deze altijd als eerste!!
        super.paintComponent( g);
        
        if (opc == null) return;
        
        // IO opvragen
        x = opc.getInput("WM8");
        x1= opc.getInput("L02009");
        if(x ==1)
        {
            gif.paintIcon(this,g,100,100);
        }
        if(x == 2)
        {
            gif1.paintIcon(this,g,100,100);
        }
    }
}


Zoiets bijvoorbeeld (de code waar ik in bezig ben is 580 regels, dus dat is net iets te groot voor op het forum.
Als ik een plaatje inlaadt, dan gaat het goed hij is wel redelijk groot want java heeft er moeite mee om het te verwerken, aangezien er een hoop JLabels ook constant worden geupdate.

Mijn vraag is, hoe kan ik een animatie fatsoenlijk laten zien, zonder dat dat deze last heeft van constant te worden gerefreshed. Ik moet 7 plaatjes totaal inladen omdat we een connectie hebben tussen een PLC <-> OPC <-> JAVA (OPC is een computer progje die elke PLC begrijpt zegmaar).

Bijvoorbeeld de wasmachine draait rechtsom, ik wil mijn plaatje rechtsom draaien dan doe ik:
Java:
1
2
3
4
if (StartK == true)
{
     gif.paintIcon(this,g,100,100);
}


Deze wil elke keer weer opnieuw ingeladen worden en verschijnt dus maar half op het scherm waardoor het hele visuele gebeuren mislukt.
Ik hoop dat jullie me kunnen verder helpen :P.

Acties:
  • 0 Henk 'm!

  • Maxxi
  • Registratie: Mei 2004
  • Laatst online: 19-04 19:18
Je laaste post is me niet helemaal helder.
Bedoel je nou dat de plaatjes te snel gerefresht worden, zodat ze nooit helemaal getekent worden?

Zoja, dan kan je toch gewoon een sleep doen? Of een hele korte timer..

Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 18-09 15:02

Stekeltje

Nothing to see here move along

Topicstarter
Ik heb het al opgelost. Ik had een totaal andere afbeelding om te testen geprobeerd, en deze werkte wonderbaarlijk genoeg gelijk. Het lag dus aan de gemaakte gifjes.
Pagina: 1