Auslagern einer Funktion

AndreG

Erfahrenes Mitglied
Hallo alle miteinander :)

Ich bin ein relativer neueinsteiger in java und habe mich dann doch auch mal selbst dran gemacht nen eigenes Prog zu schreiben. Das Haupteil funktioniert schon wunderbar nur gelingt es mir leider nicht ein teil des prgramms in eine extra datei auszulagern. Diese Hauptklassel soll nur das fenster produzieren und wenn ich auf den button copy drücke soll die 2te klasse (die ganz unten steht) ein file kopieren. Ich würde nur gerne wissen wie ich die klasse von dem hauptprog ansprechen kann (das untere prog wird noch die pfade aus einer txt auslesen später sollen einfach erstmal zumtest fest sein). Hoffe auf eure Hilfe und danke im voraus :D

p.s hoffe die überschrift pass zu dem prob ;)

Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.color.*;
import java.awt.Font.*;

class Fenster extends Frame{
	   
    Label l1,l2,l3;
    TextField t1,t2,t3;
    Button b1,b2;
    
    Fenster(String Titel) {
        
        super(Titel);
        //------------------------ActionListener---------------------------------------
        
        class ende_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
                
                System.exit(0);
                
            }
            
        }
        
        class b2_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
                
                String i = (t1.getText());
                
                String j = (t2.getText());             
                
                //System.out.print(""+i);System.out.print(""+j);             
            }
            
        }     
        
        
        class b1_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
            	
        }
    }
            
              
        
        //------------------------Menue------------------------------------------------
        
        MenuBar mbar = new MenuBar();
        
        Menu datei = new Menu("Datei");
        Menu Über = new Menu("?");
        
        MenuItem ende = new MenuItem("Beenden");
        MenuItem hilfe = new MenuItem("Info");
        
        
        datei.add(ende);
        Über.add(hilfe);
        
        mbar.add(datei);
        mbar.add(Über);
        
        setMenuBar(mbar);
        
        ende.addActionListener(new ende_Listener());
        //hilfe.addActionListener(new hilfe_Listener());
        
        
        //------------------------Panels-----------------------------------------------      
        
        Panel links = new Panel();
        links.setLayout(new GridLayout(0,1));
        links.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        l1 = new Label("Quelle:");
        l1.setForeground(Color.red);
        l2 = new Label("   Ziel:");
        l2.setForeground(Color.red);
        l3 = new Label(" Name:");
        l3.setForeground(Color.red);
        links.add(l1);
        links.add(l2);
        links.add(l3);
        
        Panel mitte = new Panel();
        mitte.setLayout(new GridLayout(0,1));
        t1 = new TextField("");
        t2 = new TextField("");
        t3 = new TextField("");
        mitte.add(t1);
        mitte.add(t2);
        mitte.add(t3);
        
        Panel rechts = new Panel();
        rechts.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        b2 = new Button("Save");
        b2.addActionListener(new b2_Listener());
        rechts.add(b2);
        
        Panel unten = new Panel();
        unten.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        b1 = new Button("Copy");
        b1.addActionListener(new b1_Listener());
        unten.add(b1);
        
        //------------------------Layout-----------------------------------------------
        
        setLayout(new BorderLayout());
        add("West",links);
        add("Center",mitte);
        add("East",rechts);
        add("South",unten);
        
        //------------------------WindowCloser-----------------------------------------
        
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }});
            
    } 
    
    //------------------------Main-------------------------------------------------
    
    public static void main(String args[]){
    	
    	        
        Fenster f1 = new Fenster("Demobackup");
        
        f1.setBackground(Color.blue);
        
        f1.setSize(300,130);
        
        f1.show();
        
    }
}

Und hier die Klasse zum kopieren:

Code:
import java.io.*;

public class KopiereDatei {
    public static void main (String [] args) throws Exception {
        RandomAccessFile datei = new RandomAccessFile("d:\\hallo.txt","r");
        RandomAccessFile neudatei = new RandomAccessFile("c:\\hallo.txt", "rw");
        while (neudatei.length() < datei.length()) {
            neudatei.write(datei.read());
        }
        datei.close();
        neudatei.close();
    }
}
 
Hi, ich hoffe ich hab richtig verstanden was du willst.

Also erstmal darf eine Applikation, soviel ich weiß, nur eine public static void main() haben.

Mit dem Auslagern meinst du hoffentlich nicht JavaBeans o.ä., sondern nur in ein eigenes class file.
Das mach ich so:

import java.io.*;

public class KopiereDatei {

public void kopiere(String url) throws Exception {
RandomAccessFile datei = new RandomAccessFile("d:\\hallo.txt","r");
RandomAccessFile neudatei = new RandomAccessFile("c:\\hallo.txt", "rw");
while (neudatei.length() < datei.length()) {
neudatei.write(datei.read());
}
datei.close();
neudatei.close();
}
}

Von dieser Klasse jetzt ein neues Objekt in deiner Hauptklasse erzeugen:

KopiereDatei kd = new KopiereDatei();

Jetzt kannst du die Methode kopiere() so ausführen:

kd.kopiere(url);

Diese Zeilen wirst du wahrscheinlich in die actionPerformed() packen.

Hoffe ich konnte ausnahmsweise mal helfen.
 
Zuletzt bearbeitet:
Du hast mich schon richtig verstanden :D habs etwas falsch ausgedrückt ;) werds nachher mal testen obs geht und thx schonmal für die schnelle antwort. und in der einen stand noch main weil ich sie aus der urfassung kopiert hatte.

edit also ich hab das mal eingefügt aber irgendwie will das nich ich poste gleich mal wie das prog nu aussieht.
 
Zuletzt bearbeitet:
Und warum hast du den String Url eingebaut? wofür brauch ich den? weil dadurch ensteht der fehler. Das ist jetzt das hauptprog:

Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.color.*;
import java.awt.Font.*;

class Fenster extends Frame{
	
	KopiereDatei kd;  
    Label l1,l2,l3;
    TextField t1,t2,t3;
    Button b1,b2;
    
    Fenster(String Titel) {
        
        super(Titel);
        //------------------------ActionListener---------------------------------------
        
        class ende_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
                
                System.exit(0);
                
            }
            
        }
        
        class b2_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
                
                String i = (t1.getText());
                
                String j = (t2.getText());             
                
   				//hier kommt das speichern in eine datei hin.             
            }
            
        }     
        
        
        class b1_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
            	
            	kd.kopiere(url);
        }
    }
            
              
        
        //------------------------Menue------------------------------------------------
        
        MenuBar mbar = new MenuBar();
        
        Menu datei = new Menu("Datei");
        Menu Über = new Menu("?");
        
        MenuItem ende = new MenuItem("Beenden");
        MenuItem hilfe = new MenuItem("Info");
        
        
        datei.add(ende);
        Über.add(hilfe);
        
        mbar.add(datei);
        mbar.add(Über);
        
        setMenuBar(mbar);
        
        ende.addActionListener(new ende_Listener());
        //hilfe.addActionListener(new hilfe_Listener());
        
        
        //------------------------Panels-----------------------------------------------      
        
        Panel links = new Panel();
        links.setLayout(new GridLayout(0,1));
        links.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        l1 = new Label("Quelle:");
        l1.setForeground(Color.red);
        l2 = new Label("   Ziel:");
        l2.setForeground(Color.red);
        l3 = new Label(" Name:");
        l3.setForeground(Color.red);
        links.add(l1);
        links.add(l2);
        links.add(l3);
        
        Panel mitte = new Panel();
        mitte.setLayout(new GridLayout(0,1));
        t1 = new TextField("");
        t2 = new TextField("");
        t3 = new TextField("");
        mitte.add(t1);
        mitte.add(t2);
        mitte.add(t3);
        
        Panel rechts = new Panel();
        rechts.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        b2 = new Button("Save");
        b2.addActionListener(new b2_Listener());
        rechts.add(b2);
        
        Panel unten = new Panel();
        unten.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        b1 = new Button("Copy");
        b1.addActionListener(new b1_Listener());
        unten.add(b1);
        
        //------------------------Layout-----------------------------------------------
        
        setLayout(new BorderLayout());
        add("West",links);
        add("Center",mitte);
        add("East",rechts);
        add("South",unten);
        
        //------------------------WindowCloser-----------------------------------------
        
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }});
            
    } 
    
    //------------------------Main-------------------------------------------------
    
    public static void main(String args[]){
    	
    	KopiereDatei kd = new KopiereDatei();
    	   	    	       
        Fenster f1 = new Fenster("Demobackup");
        
        f1.setBackground(Color.blue);
        
        f1.setSize(300,130);
        
        f1.show();
        
        
    }
}

und das die Fehlermeldung :

C:\Dokumente und Einstellungen\Andre\Desktop\Giga\DemoBackup\Fenster.java:46: cannot resolve symbol
symbol : variable url
location: class b1_Listener
kd.kopiere(url);
^
 
Zuletzt bearbeitet:
Code:
        class b1_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
            	
            	kd.kopiere(url);
        }

Weil du das Beispiel einfach übernommen hast, und nicht an deine Wünsche angepasst hast! Versuchs mal damit:

Code:
import java.io.*;  
public class KopiereDatei {
   public kopiere (String quelle,String ziel) throws Exception {          
      RandomAccessFile datei = new RandomAccessFile(quelle,"r");
      RandomAccessFile neudatei = new RandomAccessFile(ziel, "rw"); 
      while (neudatei.length() < datei.length()) {             
          neudatei.write(datei.read());         
       }          
      datei.close();         
      neudatei.close();      
   }
}

und den aufruf dann mit:

Code:
KopiereDatei kd = new KopiereDatei();

kd.kopiere("d:\\hallo.txt","c:\\hallo.txt);

So sollte das gehen!

Mfg Thomas
 
Jetzt im nachhienein seh ich es auch :) war etwas konfus. Ich habe die Actionlistener jetzt so
Code:
        class b1_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){

                quelle = (t1.getText());
                
                ziel = (t2.getText());             
                
                KopiereDatei kd = new KopiereDatei();
                
                kd.kopiere(quelle, ziel);
                
            }
            
        }
abgeändert und String quelle und ziel global deklariert. nur sagt er mir jetzt in der klasse KopiereDatei wenn ich sie compalieren will

"invalid method declaration; return type required public kopiere (String quelle,String ziel) throws Exception

Die Datei kopiere sind bei mir jetzt so aus.
Code:
import java.io.*;
public class KopiereDatei {
   public kopiere(quelle, ziel) throws Exception {          
      RandomAccessFile datei = new RandomAccessFile(quelle,"r");
      RandomAccessFile neudatei = new RandomAccessFile(ziel, "rw"); 
      while (neudatei.length() < datei.length()) {             
          neudatei.write(datei.read());         
       }          
      datei.close();         
      neudatei.close();
      
   }
}
 
Zuletzt bearbeitet:
Ja, Ja da hast du keinen Return-Type für die Methode angegeben.

Code:
import java.io.*;
public class KopiereDatei {
   public void kopiere(quelle, ziel) throws Exception {          
      RandomAccessFile datei = new RandomAccessFile(quelle,"r");
      RandomAccessFile neudatei = new RandomAccessFile(ziel, "rw"); 
      while (neudatei.length() < datei.length()) {             
          neudatei.write(datei.read());         
       }          
      datei.close();         
      neudatei.close();
      
   }
}

Mit "void" gibst du an, dass kein Wert zurückgegeben wird.
 
Jo das mit void ist mir bekannt nur sieht das jetzt folgendermassen alles aus

Code:
import java.awt.*;

import java.awt.event.*;

import java.awt.color.*;

import java.awt.Font.*;




class Fenster extends Frame{
    
    String quelle;
    String ziel;
    Label l1,l2,l3;
    TextField t1,t2,t3;
    Button b1,b2;
    
    Fenster(String Titel) {
        
        super(Titel);
        //------------------------ActionListener---------------------------------------
        
        class ende_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
                
                System.exit(0);
                
            }
            
        }
        
        class b2_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
                
                //quelle = (t1.getText());
                
                //ziel = (t2.getText());             
                
                //System.out.print(""+i);System.out.print(""+j);
                
                
            }
            
        }     
        
        
        class b1_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
            	
            	quelle = (t1.getText());
                
                ziel = (t2.getText());
                
                KopiereDatei kp = new KopiereDatei();
                
                kp.kopiere(quelle, ziel);
                
            }
            
        }   
        
        
        //------------------------Menue------------------------------------------------
        
        MenuBar mbar = new MenuBar();
        
        Menu datei = new Menu("Datei");
        Menu Über = new Menu("?");
        
        MenuItem ende = new MenuItem("Beenden");
        MenuItem hilfe = new MenuItem("Info");
        
        
        datei.add(ende);
        Über.add(hilfe);
        
        mbar.add(datei);
        mbar.add(Über);
        
        setMenuBar(mbar);
        
        ende.addActionListener(new ende_Listener());
        //hilfe.addActionListener(new hilfe_Listener());
        
        
        //------------------------Panels-----------------------------------------------
        
        
        
        Panel links = new Panel();
        links.setLayout(new GridLayout(0,1));
        links.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        l1 = new Label("Quelle:");
        l1.setForeground(Color.red);
        l2 = new Label("   Ziel:");
        l2.setForeground(Color.red);
        l3 = new Label(" Name:");
        l3.setForeground(Color.red);
        links.add(l1);
        links.add(l2);
        links.add(l3);
        
        Panel mitte = new Panel();
        mitte.setLayout(new GridLayout(0,1));
        t1 = new TextField("");
        t2 = new TextField("");
        t3 = new TextField("");
        mitte.add(t1);
        mitte.add(t2);
        mitte.add(t3);
        
        Panel rechts = new Panel();
        rechts.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        b2 = new Button("Save");
        b2.addActionListener(new b2_Listener());
        rechts.add(b2);
        
        Panel unten = new Panel();
        unten.setFont( new Font( "Serif", Font.BOLD, 15 ) );
        b1 = new Button("Copy");
        b1.addActionListener(new b1_Listener());
        unten.add(b1);
        
        //------------------------Layout-----------------------------------------------
        
        setLayout(new BorderLayout());
        add("West",links);
        add("Center",mitte);
        add("East",rechts);
        add("South",unten);
        
        //------------------------WindowCloser-----------------------------------------
        
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }});
            
    }
    //------------------------Methoden---------------------------------------------
    
    
    
    //------------------------Main-------------------------------------------------
    
    public static void main(String args[]){
            
               
        Fenster f1 = new Fenster("Demobackup");
        
        f1.setBackground(Color.blue);
        
        f1.setSize(300,130);
        
        f1.show();
        
    }
}
und die classe so
Code:
import java.io.*;
public class KopiereDatei {
   public void kopiere(String quelle, String ziel) throws Exception {          
      RandomAccessFile datei = new RandomAccessFile(quelle,"r");
      RandomAccessFile neudatei = new RandomAccessFile(ziel, "rw"); 
      while (neudatei.length() < datei.length()) {             
          neudatei.write(datei.read());         
       }          
      datei.close();         
      neudatei.close();
      
   }
}

und dieser fehler erscheint nun bei compalieren der Fenster.java

C:\Dokumente und Einstellungen\Andre\Desktop\Giga\DemoBackup\Fenster.java:61: unreported exception java.lang.Exception; must be caught or declared to be thrown
kp.kopiere(quelle, ziel);
^
was kann das jetzt den schon wieder sein? deklariert ist die klasse kopiere doch
 
Das zieht sich ja wie Kaugummi;)

Probiers mal so:

Code:
class b1_Listener implements ActionListener{
            
            public void actionPerformed(ActionEvent e){
            	
            	quelle = (t1.getText());
                
                ziel = (t2.getText());
                
               Try{
                              KopiereDatei kp = new KopiereDatei();
                              kp.kopiere(quelle, ziel);
                     }
                     catch(Exception e){
                              System.out.println("Fehler: " + e.toString());
                    }
            }
        }

Kanns grade leider nicht ausprobieren.
 

Neue Beiträge

Zurück