JFrame, Komponenten verschmiert.

devis

Mitglied
Hallo Leute, ich habe ein Problem mit meiner GUI Anwendung.

Ich habe ein ganz gewöhnliches JFrame was mit GUI Builder erstellt wurde, mit mehreren Eingabefeldern und Buttons, dazu eine Jlist.

Wenn ich jetzt die Anwendung starte sieht am Anfag alles gut aus.. sobald ich aber die anwendung ins Hintergrund schiebe oder ein anderes Fenster über meine Anwendung führe, verschwinden einfach ein paar Eingabefelder oder Buttons oder werden verschmiert..
ich weiß ehrlich gesagt nicht weiter, habe bereits sogar mit einem event versucht das Problem zu lösen, in dem ich die Methode repaint() aufgerufen habe.. hilft nichts.. das Problem besteht weiterhin..

Und noch was seltsames.. wenn ich die Anwendung in netbeas starte.. dann tritt das Problem nicht auf.. wenn ich aber die jar Datei ausführe... dann taucht es auf...
 
Zuletzt bearbeitet:
Hallo,

ich habe noch etwas entdeckt,, wenn ich die jar Datei unter eingabeforderung starte, dann sehe ich dass da eine Exception auftritt und dass sehr viele classen nicht geladen werde können.. jetzt weiß ich nicht woran das liegt.. Habe ein screenshot gemacht..

a2sex92d.jpg
 
Verwendest du das Standard LAF?

also ich habe gar kein LAF... aber ich habe gelesen, dass dann einfach ein standart look and feel gewählt wird..

Habe zuerst auch gedacht, dass es daran leigen könnte deshalb habe ich in der main methode folgendes versucht einzubinden..

Java:
 /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

hat trotzdem nicht geholfen
 
Dann könnte es möglicherweise ein Bug von der JVM sein.
OS Version? Java Version? Bitte detailliert angeben, nicht nur "Windows XP, Java 7".
 
Dann könnte es möglicherweise ein Bug von der JVM sein.
OS Version? Java Version? Bitte detailliert angeben, nicht nur "Windows XP, Java 7".

OS: Windows XP Service Pack 3, Java wurde aktuellste installiert jdk1.7.0_09 und jre7

Ich glaube ich bin der Lösung etwas näher gekommen...

Und zwar verwende ich für meine GUI Anwendung ein ServiceLoader der zwei Klassen, in der GUI Klassendatei im Konstruktor, einbindet. Das ganze sieht so aus:

Java:
 private Gui() 
    {
      ServiceLoader<Data_Process_Model> dat_process = ServiceLoader.load(Data_Process_Model.class);
      ServiceLoader<D_Base_Write_Read_able> d_base = ServiceLoader.load(D_Base_Write_Read_able.class);
      
        this.data_process = dat_process.iterator().next();
        this.data_base    = d_base.iterator().next();
        
        System.out.println(this.data_base);
       
        initComponents();
        setVisible(true);
        
        
         
        
    }

Ich habe gerade nähmlich versucht über meine GUI Anwendung auf funktionen aus der Klasse dat_process und d_base zuzugreifen. Am Anfang tratt halt das Problem mit verschmieren auf.. Sobald ich aber eine Runde hatte, das heißt paar funktionen aus data Prozess aufgeführt hatte.. verschwand das Problem und tratt nicht mehr auf, bis die Anwendung geschlossen wurde.. dann von vorne.

Ich glaube das liegt daran, dass aus irgendeinem Grund die Klassen nicht rechtzeitig von Serviceloader geladen werden...
 
Attach mal die Source von Java SE, solltest du in [c]src.zip[/c] oder [c]source.zip[/c] im Hauptordner deines JDK finden. Dann hast du die Zeilenangabe und kannst dir einen Breakpoint auf dieser Zeile setzen.
 
Attach mal die Source von Java SE, solltest du in [c]src.zip[/c] oder [c]source.zip[/c] im Hauptordner deines JDK finden. Dann hast du die Zeilenangabe und kannst dir einen Breakpoint auf dieser Zeile setzen.

was meinst mit attach? so gut kenne ich mich doch nicht aus.. ich habe gerade unter rogramme/java/jdk nachgeschaut da liegt tatsächlich eine src.zip datei
 
Mit welcher IDE arbeitest du? Wenn du z.B. in Eclipse im Debugging Mode in Klassen rein willst, für die du keinen Source code attached hast, kannst du einfach auf "Attach source..." und dann das Zip/Jar/was auch immer auswählen. Und - tadaaa - der Source ist da und du kannst durch die Klassen debuggen.
 
ich arbeite mit netbeans... habe da auch ein debuger aber.. es bringt nichts mit debuger nach fehlern zusuchen, wenn die gui anwengung aus netbeans heraus gesartet wird.. es tauche einfach keine fehler auf und das Programm wird ohne Probleme ausgeführt..
 
Naja, du musst java/javaw mit bestimmten Parametern starten, frage Mr. Google.
Und wie du von Netbeans connectest, weiss ich nicht. In Eclipse kann man eine neue Debug Config anlegen, heisst Remote Debug o.ä.
 
also in dem screenshot steht, das da ne npe beim zugriff auf JList.getsize() passiert. nur mal so angemerkt
 
Leute ich habe den Fehler gefunden, bone2 hatte das auch richtig gesehen.

Im Programm Code habe ich eine Event Funktion drine stehen, die mir beim Programmstart die JList aktualisieren soll.

Java:
//Aktualisiere bei jedem Programm start die Liste und verwende den Filter!
    private void jList1AncestorAdded(javax.swing.event.AncestorEvent evt) {                                     
        jList1.setListData(new File(".//File_Manager_Temp//").list(new FilenameFilter() {

                @Override
                public boolean accept(File dir, String name) {
                   return dir.isDirectory()&&dir.equals(new File(".//File_Manager_Temp//"))&& name.endsWith(".html");
                }
            }));
    }

Der Ordner File_Manager_Temp ist aber zu Beginn nicht vorhanden. Das heißt, das Programm muss diesen Ordner erst erstellen. Das geschieht aber wenn eine Protocoldatei geschrieben wird, das heißt wenn Programmfunktionen ausgeführt wurden. Hier verweise ich auf mein Post #6. wo ich festgestellt habe, dass wenn Programmfunktionen einmal ausgeführt werden das Problem dann verschwiendet.
Klar tut es das, denn dann ist ja der File_Manager_Temp Ordner erstellt.
Und solange er noch fehlt bekommt JList beim Programmstart den wert null und löst eine NullPointerException aus, denn in Javadoc zu File().list() steht "If this abstract pathname does not denote a directory, then list return null."

🙂

Danke euch, dass ihr mein Beitrag angeschau habt...
 

Neue Themen


Zurück
Oben