Problem beim Speichern und Laden von Daten

Saumau

Mitglied
Hi Leute,

ich hab da mal ein kleines Problem. Ich möchte gern ein Programm schreiben was etwas speichert und es auch wieder laden kann. Dazu hab ich schon ein kleines Konsolenprogramm geschrieben.Das klappt auch soweit alles.

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

package objektspeichern;

/**
 *
 * @author manfredschaumburg
 */

import java.io.*;

public class Main {
     String [] date = {"Mo", "Di", "Mi"};
    /**
     * @param args the command line arguments
     */

     public void saveDate () throws Exception {
        FileOutputStream fos = new FileOutputStream("date.out");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(date);
        date[1]="xxx";
        System.out.println("date [1]"+date[1]);
        oos.flush();
        oos.close();
        fos.close();
    }
    
    public void loadDate () throws Exception {
        FileInputStream fis = new FileInputStream("date.out");
        ObjectInputStream ois = new ObjectInputStream(fis);
        date = (String []) ois.readObject();
        System.out.println("date [1]"+date[1]);
        ois.close();
        fis.close();
    }



    public static void main(String[] args) throws Exception {
      Main m = new Main();
      m.saveDate();
      m.loadDate();
      // loadDate();
    }
}

Nun möchte ich allerdings ein Programm mit GUI schreiben (JFrame.java) doch ich habe keine Ahnung wie das gehen soll.
Ich möchte einfach nur ein jTextField und zwei Buttons mit dem man den Text des jTextFields speichern kann und später auch wieder laden kann und möglichst nur mit den Befehlen die ich oben auch verwendet habe.
Kann mir da jemand mal ein Beispielprogramm schreiben?


Danke schonmal im voraus.
mfg Max
 
Stichwörter: JFrame als Fenster, JTextField zur Eingabe, JButton als Tasten, LayoutManager um die Komponenten anordnen zu lassen (anfangs wohl das mit Abstand schwierigse Thema, aber viel zu wichtig zum ignorieren), ActionListener damit die Buttons auch etwas tun.
Beispielprogramm bringt nicht zu viel, einerseits lernst du damit nicht so viel, andererseits muss jeder seinen eigenen Stil finden.
 
Hallo Max,

willkommen im Forum!
Kannst du mir mal Geld überweisen, damit ich dir dein Programm schreibe?

Kleiner Scherz. Aber jetzt im Ernst: lies doch erst mal ein Tutorial über Gui Programmierung.
Wenn du dann noch ein Problem hast, dann poste deinen Code und erkläre uns das konkrete Problem.

Gruß,
André
 
Mit GUI kenn ich mich schon aus, doch wenn ich diesen Code den ich am Anfang gepostet habe, einfüge, dann geht das überhaupt nicht. Es kommen immer Fehlermeldungen.
Kann mir nicht doch vielleicht jemand mal nur ein Beispiel schreiben? Kann auch nur der Teil mit den Buttons sein.
 
das problem dürfte wohl der name deiner klasse sein ... weil so weis der compiler nämlich nicht mehr ob er javax.swing.JFrame oder deine JFrame klasse nutzen soll ...
 
Noch Besser (schließt den Source natürlich nicht aus) wäre die Fehlermeldungen zu posten, daraus kann man gleich auf den Fehler schließen.
 
Das ist der Code den ich jetzt hab, aber der geht vorne und hinten nicht ;(

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

/*
 * NewJFrame.java
 *
 * Created on 26.04.2011, 13:18:37
 */

import java.io.*;

package speichernladen;

/**
 *
 * @author max
 */
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        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() {

        Speichern = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        Laden = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        Speichern.setText("Speichern");
        Speichern.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SpeichernActionPerformed(evt);
            }
        });

        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });

        Laden.setText("Laden");
        Laden.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                LadenActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap(138, Short.MAX_VALUE)
                .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 44, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, Laden, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, Speichern, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .add(95, 95, 95))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(132, 132, 132)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(Speichern)
                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(Laden)
                .addContainerGap(104, Short.MAX_VALUE))
        );

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

    private void SpeichernActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        public void saveDate () throws Exception {
        FileOutputStream fos = new FileOutputStream("date.out");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        String text = jTextField1.getText();
        oos.writeObject(text);
        oos.flush();
        oos.close();
        fos.close();
    }
    }

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    private void LadenActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        public void loadDate () throws Exception {
        FileInputStream fis = new FileInputStream("date.out");
        ObjectInputStream ois = new ObjectInputStream(fis);
        text = (String) ois.readObject();
        ois.close();
        fis.close();
    }
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton Laden;
    private javax.swing.JButton Speichern;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration

}
 
Verständlich.
Package-Deklaration nach Importen. Die Methode SpeichernActionPerformed enthält eine Methode. LadenActionPerformed dito.

Du schreibst "Mit GUI kenn ich mich schon aus" und verwendest dann das GroupLayout? Kaufe ich dir nicht ab, selbst wenn ich mal die Komentare "<editor-fold defaultstate="collapsed" desc="Generated Code">", "To change this template, choose Tools | Templates and open the template in the editor." und "WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor." außer acht lasse.
 
Ich weiß bei GUI halt nur die wichtigsten Sachen.
Aber wenn du überall die Fehler siehst, dann kannst du mich ja vielleicht verbessern?
 
Ok. Ich hab alles nochmal überarbeiten und das ist jetzt das Ergebnis:

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

/*
 * NewJFrame.java
 *
 * Created on 26.04.2011, 13:18:37
 */

package speichernladen;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author max
 */
public class NewJFrame extends javax.swing.JFrame {
    private String text;

    /** Creates new form NewJFrame */
    public NewJFrame() {
        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() {

        Speichern = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        Laden = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        Speichern.setText("Speichern");
        Speichern.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SpeichernActionPerformed(evt);
            }
        });

        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });

        Laden.setText("Laden");
        Laden.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                LadenActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap(138, Short.MAX_VALUE)
                .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 44, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, Laden, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, Speichern, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .add(95, 95, 95))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(132, 132, 132)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(Speichern)
                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(Laden)
                .addContainerGap(104, Short.MAX_VALUE))
        );

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

    private void SpeichernActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("text.out");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(fos);
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        text = jTextField1.getText();
        try {
            oos.writeObject(text);
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            oos.flush();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            oos.close();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            fos.close();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                         

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
    }                                           

    private void LadenActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("text.out");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(fis);
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            text = (String) ois.readObject();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            ois.close();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            fis.close();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }                                     

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton Laden;
    private javax.swing.JButton Speichern;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   

}

Ich arbeite mit Netbeans und teilweise waren das Verbesserungsvorschläge des Programms. Es werden keine Fehler angezeigt, wenn ich allerdings das Programm ausführen möchten, dann kommt diese Fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: speichernladen/Main
Caused by: java.lang.ClassNotFoundException: speichernladen.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Java Result: 1

Kann mir da vielleicht jemand weiterhelfen?
 
Hi,

kann auch erst einmal nur raten, aber kann es sein, dass du ein standard Java Projekt erstellt hast und dann den Code für die GUI da rein kopiert hast, bzw. die Klasse einfach von "Main" in "NewJFrame" umbenannt hast (also nicht über "refactor->rename")!?

Denn, er sucht die Klasse Main, die du nicht hast...

Was steht denn bei dir unter Projekt->Properties->Run-> Main Class ?


Gruß
Ralf
 
Mach mal ein neues NetBeans Projekt. Unter "Choose project" wählst du dabei "Categories: Java" und "Projects: Java Application". Deine Klasse kannst du dann in das neue Projekt kopieren. Danach müsste es funktionieren.

Gruß,
André
 
Danke an alle!!! 😀

Ich habs jetzt hinbekommen. Hab einfach nochmal eine neues Projekt erstellt, wie es André Uhres gesagt hat und jetzt klappt alles :applaus:
 

Neue Themen


Zurück
Oben