VirtualBankingSystem

nitram0598

Mitglied
hallihallo liebes forum, ich habe ein problem:

wenn ich mein programm ausführen möchte, dann klappt das auch, aber wenn ich auf beenden klicke, klappte das auch!

jetzt habe ich was verändert am beenden, und jetzt klappt es net mehr

ich kann aber mit dem fehler nix anfangen!?

helft mir pls,

Martin
 

Anhänge

  • VirtualBankingSystem.zip
    44,5 KB · Aufrufe: 5
Zuletzt bearbeitet von einem Moderator:

nitram0598

Mitglied
ich habe probiert einen eigenen dialog zu basteln, der was speichert, aber anscheinend ist irgendetwas schief gegangen, und wenn ich auf beenden klicke, sollte der dialog kommen , aber das programm hängt sich nur auf, der fehlercode ist:

[WR]run:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Win32GraphicsConfig.java:222)
at java.awt.Window.init(Window.java:496)
at java.awt.Window.<init>(Window.java:535)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:180)
at form.dialog_save.<init>(dialog_save.java:16)
at run.save.<init>(save.java:14)
at form.dialog_save.<init>(dialog_save.java:93)
at run.save.<init>(save.java:14)
[..]
at form.dialog_save.<init>(dialog_save.java:93)
at run.save.<init>(save.java:14)
[/WR]

fortsetzung
 
Zuletzt bearbeitet von einem Moderator:

nitram0598

Mitglied
[WR]at form.dialog_save.<init>(dialog_save.java:93)
at run.save.<init>(save.java:14)
at form.dialog_save.<init>(dialog_save.java:93)
at run.save.<init>(save.java:14)
at form.dialog_save.<init>(dialog_save.java:93)
at run.save.<init>(save.java:14)
at form.dialog_save.<init>(dialog_save.java:93)
[..]
at run.save.<init>(save.java:14)
at form.dialog_save.<init>(dialog_save.java:93)
BUILD SUCCESSFUL (total time: 10 seconds)[/WR]
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
Endlosschleife identifizieren und weg machen.

offenichtlich rufst du im save wieder save auf.
 

nitram0598

Mitglied
also, sry, beschäftige mich nochnet so lange mit java, habe aber 3 jahre c++ geproggt, kannst du mir sagen was ich jetzt schritt für schritt machen soll?
 
S

SlaterB

Gast
da braucht man nicht den Code, das sieht man an der Fehlermeldung (die ich gekürzt habe):

was form.dialog_save und run.save sind weißt du hoffentlich,
<init> steht für Konstruktoren, das ist sicher etwas was man einmal lernen muss,

der Konstruktor von form.dialog_save, was immer das ist, erzeugt ein run.save, dieses wiederum ein form.dialog_save usw. im gegenseitigen Wechsel,
durchbreche den Kreis, erzeuge nicht überall andere Objekte,
übergib z.B. in form.dialog_save das eigene Objekt (this) an den Konstruktor von run.save als Parameter, dann muss der kein form.dialog_save-Objekt erzeugen
 

tfa

Top Contributor
ich finde sie net, kannst du mir helfen, das projekt ist im ersten beitrag von mir
Die Methode save ruft sich unendlich oft selbst auf. Das ist der Fehler. Wenn du lange c++ "geproggt" hast, solltes du den fehler finden. In dieser Sprache ist das nicht anders.
 

Gossi

Bekanntes Mitglied
wie sieht denn eine endlosschleife aus?

Gibt viele möglichkeiten, hier mal ein paar:

Java:
while(true) {

}

for(int i = 0; i <= 1; i = i+0) {

}

for(int i = 0; i <= 1; i++) {
     i--;
}

Du musst nach einer Schleife suchen, die nie beendet wird...

EDIT:
Oder nach einer Schleife in der immer neue Objekte erzeugt werden die wiede neue erzeugen usw..
 

nitram0598

Mitglied
aber eigentlich kommt da gar keine schleife???

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package run;


/**
 *
 * @author Martin
 */
public class save {
    
    form.dialog_save dia = new form.dialog_save();
    form.main main = new form.main();
    
    public void yes() {
        dia.dispose();
    }
    
    public void no() {
        dia.dispose();
    }
    
    public void fin() {
        dia.dispose();
        main.dispose();
    }
    
}

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package form;

/**
 *
 * @author Martin
 */
public class dialog_save extends javax.swing.JFrame {

    /**
     * Creates new form dialog_save
     */
    public dialog_save() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);

        jButton1.setText("Ja");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Nein");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("Abbrechen");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jTextField1.setEditable(false);
        jTextField1.setText("jTextField1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addGap(18, 18, 18)
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 81, Short.MAX_VALUE)
                        .addComponent(jButton3)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    run.save save = new run.save();
    
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        save.fin();
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        save.no();
    }                                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        save.yes();
    }                                        
    
    public void set(String Title, String Text) {
        this.setTitle(Title);
        this.jTextField1.setText(Text);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * 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(dialog_save.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(dialog_save.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(dialog_save.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(dialog_save.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new dialog_save().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}
 
S

SlaterB

Gast
ich habe es in meinen Posting (09:39) erklärt,
direkte Instanzattribute entsprechen Konstruktor-Erzeugungen,
Konstruktoren mit Parametern anzulegen ist für deinen Kenntnisstand sicher eine Herausforderung,
aber versuche erstmal selber beginnen zu denken

andere Tipps hier sind etwas fraglich, besonders von tfa, genauer nachschauen ;)
 

Gossi

Bekanntes Mitglied
aber eigentlich kommt da gar keine schleife???

Java:
form.dialog_save dia = new form.dialog_save();
form.main main = new form.main();

Java:
run.save save = new run.save();

Siehst du deine Endlosschleife nu selber? ^^

Hier wird erst in "dialog_save" ein "run.save" erzeugt, dieser erzeugt ein neues Objekt der Klasse "dialog_save", dieser erstellt einen neuen "run.save", der einen neuen dialog_save usw...
 

Gossi

Bekanntes Mitglied
aber eigentlich kommt da gar keine schleife???

Java:
/......

public class save {
    
    form.dialog_save dia;
    form.main main = new form.main();
    
    public save(form.dialog dialog) {
        dia = dialog;
    }

    /......  
  
}

Java:
/......

public class dialog_save extends javax.swing.JFrame {

    /......
    run.save save = new run.save(this);
    /......
                     
}

Solltest du als ex C++-Entwickler aber kennen und wissen...

Und schreib Klassennamen doch bitte beim nächstenmal groß...
 
S

SlaterB

Gast
hier derselbe Fehler:

Java:
public class Test  {
    public static void main(String[] args)  {
        new A();

    }
}

class A  {
    B b = new B();
}

class B  {
    A a = new A();
}
A erzeugt B, B erzeugt A, A wieder B usw. -> Endlosschleife bzw. lieber Kreis genannt

A braucht aber eine Referenz auf ein B, und B eine Referenz auf ein A,
kannst du dir irgendwas überlegen um das zu lösen?

keine Sorge, darf auch 30 Min. dauern, musst keine PMs schreiben, keine Postings alle 45 Sek und auf Füllwörter wie 'pls' 'sry' '???' usw. ruhig verzichten,
wenn du es nicht lösen kannst kommen sicher bald die Tipps, aber versuche dir die Zeit zu nehmen und mal darüber nachzudenken,
das ist ein sehr wichtiges Grundlagenproblem, in C++ sicher genauso
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
obwohl ich in meinem Posting von 09:39
der Konstruktor von A, was immer das ist, erzeugt ein B, dieses wiederum ein A usw.
geschrieben habe mit anderen Inhalt für A und B?,
obwohl andere das auch schon geschrieben haben?
und obwohl die Fehlermeldung genauso aussieht mit abwechselnden Klassen, statt A und B nur deine Klassennamen?

soso
 
S

SlaterB

Gast
das wird schwer, jemanden zu finden, der im Chaos direkt etwas sucht, was nicht von Fehlermeldungen gleich aufgezeigt wird

wenn du Code anderen Menschen zeigen willst, musst du dich an kinderleichte Grundlagen halten,
die man an der API und überall auf der ganzen Welt sieht und nur einhalten muss

Klassen schreibt man groß!, keine _ in Klassennamen,

eine Klasse die von JFrame erbt besser nicht Dialog nennen, denn JDialog ist eine konkurrierende Basisklasse zu JFrame,
was vielleicht nicht ganz bewußt war,

verwende Imports!
schreibe nicht
Java:
package.Klassenname variablenname = new pakage.Klassenname();
sondern
Java:
import package.Klassenname;


Klassenname variablenname = new Klassenname();
bsonders schlimm bei Klassennamen mit Kleinbuchstaben, die wie packages aussehen,
usw.,


Verwendung von GUI-Buildern mit automatisch generierten Code ist natürlich schwer zu ersetzen,
aber auch wieder eine Zumutung, wenn du so einen Code an andere Menschen (Achtung, Menschen sind keine Computer) schickst
 

Oben