[Java] ImageIcon null setzen klappt nicht

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 20. November 2009 .

Schlagworte:
  1. 20. November 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    ImageIcon null setzen klappt nicht

    Hey hab wieder ein kleines Prob. zum web.de generator!

    Und zwar wollt ich ne Funktion einbauen, die es erlaubt den Captcha zu reloaden!

    Ist eig. total einfach es muss nur die Methode connect() wieder aufgerufen werden, da in der Methode der captchalink besorgt wird und als Icon in ein JLabel eingesetzt wird, welches wiederum in ein panel geaddet wird!

    Nun hab ich aber ein kleines Problem, dass mein Programm sich iwie aufhängt ^^

    Hier mal kurz die wichtigen Methoden:

    Code:
     checkcaptcha(quellcode);
     str = "";
     quellcode = "";
    
     icon = new ImageIcon(captchal);
     JLabel captchabild = new JLabel(icon);
     panel1.add(captchabild);
     captchabild.setVisible(true);// captcha anzeigen
     sFrame.repaint();
     System.out.println("Captcha eingefügt!");
     sFrame.setVisible(true);
    das ist ein Teil der connect() da wird der quelltext nach dem captcha durchsucht (checkcaptcha(quellcode) und dann in ein icon gesetzt und das in ein Label und dieses Label komm in den panel.

    Das captcha wird auch richtig angezeigt im Panel etc.

    Nun kommt der Captcha Reload:

    Code:
     if (buttonclick.equals("reload")) {
     System.out.println("*******************Reload Captcha***********************");
     panel1.remove(captchabild);
     try {
     connectweb();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     }
    Ich hatte anfangs Probleme damit, dass die Methode funktioniert hat, nur wurde das icon dazugesetzt ^^ ich hatte dann 2 captchas drinn!!
    Das soll natürlich nicht so sein deswegen

    mach ich panel1.remove(captchabild) also den label raus.
    Damit er später wieder neu eingesetzt wird!

    So, wenn ich jetzt auf Reload klicke, kommt das hier ^^

    Bild

    Am consolen Ausschnitt sieht man, dass er ind ie MEthode connect() reingeht und den neuen Capcha auch lädt! Aber das Frame hängt sich auf!

    Kann einer helfen diesen Scheiß captcha zu reloaden ^^

    Edit:

    Da gabs noch einige Fehler beim quellcode lesen, da nach nem reload, der etwas anders aussieht (vorallem wegen den Cookies)!!!

    Hab das jetzt optimiert, in der console taucht auch der richtige neue captchalink auf!
    Der wird aber nicht ausgegeben xD

    Sondern es bleibt der alte drinn!!
     
  2. 26. November 2009
    AW: ImageIcon null setzen klappt nicht

    ~push~
    denn es kappt immernoch nich.! xD

    Es ist eigentlich voll einfach den Icon null setzen dann den panel + Label repainten dann sollte des icon eig. wieder weg sein, aber es bleibt einfach stur da stehen!

    HIer nochmal ein kleinerer Code, der erste Beitrag hatte vllt. zu viel Text^^

    Code:
     if (x.equals(reload)) {
     System.out.println("*******************Reload Captcha***********************");
    
     captchabild.setIcon(null); //das Icon wird aus dem Label gerissen
     captchal=null; //Label wird null gesetzt
     icon = null;//icon wird nullgesetzt Hier ist der URL Link zum captcha drinn!
     sFrame.repaint();
     
    
     panel1.repaint(); // das Panel mti dem Label
     captchabild.repaint(); //Lael repainten
     sFrame.repaint(); //Frame nochmal repainten
     System.out.println("Captcha renewed");
     System.out.println(icon); //Hier wird dann auch null ausgegeben da icon ja null gesetzt wird
    
     }
    
    So obwohl der icon null ist und dann alles auch repainted wird, bleibt das icon im Frame!!!!!
    Das Scheiß Bild will einfach nicht weggehen!!!
    nur wenn ich den panel setVisible(false) mache, dann sieht man den ganzen Panel nich mehr, aber der icon bleibt drinn und verändert sich nicht!

    Beim Debuggen zeigt der mir auch alles richtig an, icon ist null etc. aber des scheiß icon wird immernoch angezeigt!

    Hat denn keiner ne Idee?
     
  3. 26. November 2009
    AW: ImageIcon null setzen klappt nicht

    das ist irgendwie strange.

    eigentlich müsste man nur dem label sagen, dass das zu setzende icon null ist.

    Code:
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.*;
    
    
    public class MyFrame extends JFrame implements ActionListener{
    
     
     JLabel label; 
     ImageIcon icon;
    
     Button button = new Button("Remove me!");
     
     public MyFrame() {
     
     super("MyFrame");
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setSize(200, 100);
     button.addActionListener(this);
     
     // setting the image
     icon = new ImageIcon( "sigpic5910_2.gif" );
     label = new JLabel( icon );
     
     JPanel content = new JPanel();
     content.setLayout(new BorderLayout());
     
     // adding button to the content (JPanel)
     content.add(button , BorderLayout.SOUTH);
     content.add(label,BorderLayout.CENTER);
     
     setContentPane(content);
     setVisible(true);
     }
     
     public final void actionPerformed(ActionEvent e) {
     
     if (e.getActionCommand().equals(button.getActionCommand())) {
     label.setIcon( null );
     }
     }
     
     public static void main(String[] args) {
     
     MyFrame mf = new MyFrame(); 
     }
    }
    
    
    also in diesem beispiel funktioniert das.

    könntest du mal deinen konstruktor posten? vielleicht liegt es daran, dass du mehrere panels oder so verwendest.


    nice day
    harry
     
  4. 26. November 2009
    AW: ImageIcon null setzen klappt nicht

    Die panels Labels und des Icon sind globale Variablen, also kann man sie überall verändern!

    Panel Erstellung im Frame:
    Code:
     sFrame = new JFrame("web.de gen 0.3 by unix");
     sFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     sFrame.setSize(270, 350);
     center();
     sFrame.setLocation(x, y);
     sFrame.setLayout(new GridLayout(4, 1));
     menuBar.add(Menü);
     Action helpAction = new AbstractAction("Info") {
     public void actionPerformed(ActionEvent e) {
     info();
     }
     };
     Menü.add(helpAction);
     sFrame.setJMenuBar(menuBar);
     sFrame.add(panel1);// des ist der Panel mit dem Captcha
     sFrame.add(panel2);
     sFrame.add(panel3);
     sFrame.add(panel5);
    Einfügen des Captchas als icon im URL Format
    Code:
     icon = new ImageIcon(checkcaptcha(quellcode));// Die Methode checkcaptcha(String) gibt ein URL Objekt zurück mit dem Link zum captcha!
     JLabel captchabild = new JLabel(icon);
     panel1.add(captchabild);
     captchabild.setVisible(true);// captcha anzeigen
     System.out.println("Captcha eingefügt!");
     System.out.println(icon);
     panel1.repaint();
    So jetzt wurde das ICON hinzugefügt und wird auch im panel1 in einem Label angezeigt!
    Und die Methode zum reloaden ist ja oben!

    Testweise hab ichs halt nur versucht zuerst rauszukillen des icon! Weil mit dem neuen icon einfügen ist es eig. auch easy nur icon zuerst killen dann die Methode nochmal ausführen in der der captchalink als icon gesetzt wird!!!

    Es gibt ja noch ne Methode finalize(); aber wenn ich die einbaue zum icon zerstören, kommt im eclipse nur:

    Obwohl ich die Klasse java.lang.Object importiere etc...
     
  5. 26. November 2009
    AW: ImageIcon null setzen klappt nicht

    versuche mal folgendes.

    bevor du das NEUE icon dem panel hinzufügst, remove mal alles raus.

    mit folgenden aufruf
    Code:
    panel.removeAll();
    
    dann kannst du es ihm wieder hinzufügen.



    hoffe das es das war. ;-)


    nice day,
    harry
     
  6. 27. November 2009
    AW: ImageIcon null setzen klappt nicht

    hhmm ok das mit dem entfernen klappt jetzt!
    Zwar nich so wie man es hinprogrammiert hat, das icon verschwindet viel zu spät Habs jetzt mal so gemacht:

    Code:
     captchabild.setIcon(null);
     captchal=null;
     captchalink = null;
     panel1.removeAll();
     sFrame.repaint();
     panel1.repaint();
     sFrame.setVisible(true);
     try {
     connectweb();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
    Des Icon wird aber erst nach der Methode connectweb() iwann entfernt, debuggen ist das dauert Lange in letzter Zeit iwie.!

    Jetzt hab ich noch Probleme beim wieder anlegen xD

    Ich entferne zuerst alles vom Panel damit da nix mehr zu sehen ist, dann wird wieder die Methode aufgerufen um ein Captcha zu holen!

    zuerst wird ein neuer GET Befehl durchgeführt (wie ne Aktualisierung im Browser) und dann wird der Quellcode wieder auf den neuen Captchalink untersucht!

    Der wird richtig ausgegeben,!!

    Also:
    Code:
     icon = new ImageIcon(checkcaptcha(quellcode));
     str = "";
     quellcode = "";
    
     JLabel captchabild = new JLabel(icon);
     panel1.add(captchabild);
     captchabild.setVisible(true);// captcha anzeigen
     System.out.println("Captcha eingefügt!");
     System.out.println(icon);
     panel1.repaint();
     captchabild.repaint();
     sFrame.repaint();
    Hier wird ein funzender neuer Captchalink in das icon eingesetzt! und dieser wiederrum dem panel dazugetan!

    Aber das Panel bleibt einfach leer xD
     
  7. 27. November 2009
    AW: ImageIcon null setzen klappt nicht

    wenn ich die bruchstücke deines src richtig verstanden habe, dann brauchst du diese sachen nicht:
    Code:
    captchabild.setIcon(null);
    captchal=null;
    captchalink = null;
    
    denn in der methode connect(?) werden die werte ja überschrieben.


    kommen wir nun zum raten.

    kann es sein, dass du irgendwo einen thread am laufen hast? denn unter umständen kann dieser deinen programmfluss unterbrechen. vermutlich konntest du auch deshalb nicht debuggen.



    nice day
    harry
     
  8. 27. November 2009
    AW: ImageIcon null setzen klappt nicht

    Ich nutze keine zusätzlichen Threads!

    Nur halt paar mal die Thread.sleep() Methode ^^ zum warten nach paar GET Requests!

    Und ich weiß das diese Überschrieben werden, das seh ich ja an der Consolenausgabe das da in dem icon ein neuer Link drin steht zum neuen captcha, aber der zeigt mir des neue dann nicht an!

    Der blendet das alte captcha aus und fügt des dann nicht wieder ein xD

    //Edit:

    Hab jetzt noch 2 Consolenausgaben eingebaut: panel1.getComponentCount()
    Aus denen geht hervor, das des panel1.removeAll() wirklich alles raus haut dann zeigt der mir 0 an
    und wenn ich des neue icon mit dem neuem captcha link wieder einfüge kommt 1 raus!

    Aber das panel bleibt leer xD
    Aber wenn ich dem Label (der das icon in sich hat) noch nen Text hinzufüge, wird der Text angezeigt aber der icon nicht!
    Also stimmt was nich mitm icon xD
     
  9. 29. November 2009
    AW: ImageIcon null setzen klappt nicht

    mmmhhhh okay.


    wenn er das bild eingefügt hat, versuch mal das fenster größer zu machen. vielleicht haut er das bild woanderes hin, wo du es nicht siehst.
     
  10. 29. November 2009
    AW: ImageIcon null setzen klappt nicht

    hhm ich glaub langsam das mit dem icon alles stimmt, aber der captchalink iwiei fehlerhaft ist!

    Beim ersten Laden der Seite sieht der so aus:
    Code:
    https://user.web.de/Captcha/img.5C9A2C1F7BED354970807387877DF59C.a02a01d40t22_1870069772.jpg;jsessionid=5C9A2C1F7BED354970807387877DF59C.a02a01d40t22?id=5C9A2C1F7BED354970807387877DF59C.a02a01d40t22_1870069772
    und beim 2. Laden also nach nem Reload so:
    Code:
    https://user.web.de/Captcha/img.5C9A2C1F7BED354970807387877DF59C.a02a01d40t22_108396576.jpg?id=5C9A2C1F7BED354970807387877DF59C.a02a01d40t22_108396576
    da fehlt dann das mitsenden der jsession, aber ich hab schon alles probiert damit, hab da in den String schon die jsession eingefügt, mit nem ? und ; getrennt etc. das Bild wird nicht angezeigt!
    Aber im Browser wirds angezeigt!
    Und das ist aber auch auf der website von web.de so!

    Und wenn ich mir das Bild im Browser direkt anschaue, und dann per F5 aktualisiere, dann kommt ein neues captcha aber der alte Link bleibt erhalten....
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.