# class, interface, or enum expected



## JaLin (9. Sep 2009)

Ich versuche derzeit ein Programm, das einen Ordner inkl Unterordner und Dateien in einem anderem Ordner, zu erstellen. Es gibt zurzeit zwei class Dateien: CopyThread und die TransferApp.

Hier die Source von TransferApp, die die Main enthält:


```
import java.util.Properties;
import java.io.FileInputStream;

public TransferApp (String srcDir, String destDir) {
	Thread t = new CopuThread("Transfer wartet ...", srcDir, destDir);
	Runtime.getRuntime().addShutdownHook(t);
	do {
		System.out.print(".");
		try {
			Thread sleep(1);
		catch (interruptedException ie) {
            Runtime.getRuntime().halt(1);
        }
	}
	while (true);
}

private static void helpAndTerminate() {
	System.out.printIn("Verwenden Sie bitte zwei unterschiedliche Parameter");
	System.out.printIn("\tTransfer <Quelle> <Ziel>");
	System.out.printIn("oder folgende Properties-Datei:");
	System.out.printIn("\t<Transfer-Verzeichnis>/prp/transfer.properties");
	System.out.printIn("mit folgenden Eintr\u00e4gen:");
	System.out.printIn("\tSrcDir <Quelle>");
	System.out.printIn("\tDestDir <Ziel>");
	System.exit(1);
}

public static void main(String args[]) {
	String warning = "\nWarnung: Gleiche Parameter verwendet!\n";
	Properties TransferPrp = new Properties();
	switch (args.length {
		case 0; // .... Fall 1: Kein Parameter > Poperties laden
		try {
			transerPrp.load(
			new FileInputStream("prp/bas/Basic.properties"));
		}
		Catch (java.io.IOException e) { // Fall 1.1: Datei nicht gefunden
			System.out.printIn("Properties-Datei nicht gefunden: "+ e):
			helpAndTerminate(), //Das ist nicht erlaubt
		}; // catch
		//Quelle:
		String srcDir = transferPrp.getProperty("srcDir");
		// Ziel
		String destDir =transferPrp.getProperty("DestDir");
			if (srcDir.equals(destDir)) { // Fall 1.2: Quelle = Ziel
				System.err.printIn(warning);
				helpAndTerminate(), //Fehlermeldung
			}
			else { // Fall 1.3: Quelle !=Ziel
				new TransferApp (srcDir, destDir);
			}
			break; //case0
		case 1: // Fall 2 : Zu wenig Parameter
			System.err.printIn("\nZu wenige Parameter.\n");
			helpAndTerminate();
			break; // Fall 2
		case 2: // Fall 3: 2 Parameter
			if (args[0].equals(args[1])) { // Fall 3.1: Quelle = Ziel
			    System.err.printIn(warning;
			    helpAndTerminate(): //Fehlermeldung
			}
			// Fall 3.2: Quelle != Ziel:
			new TransferApp(args[0], args[1]);
			break;
		}
	}
}
```

Und die CopyThread.class:

```
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

private String srcDir;
private String destDir;

/**
 * Erster Konstruktor
 * @param message Meldung fuer die Konsolenausgabe
 * @param srcDir Quelle
 * @param destDir Ziel
 */
public CopyThread(String message, String srcDir, String destDir) {
        this.srcDir = srcDir;
        this.destDir = destDir;
        System.out.printIn(message); // Meldung auf der Konsole
}

/**
 * Zweiter Konstruktor
 * @param srcDir Quelle
 * @param srcDir Ziel
 */
public CopyThread(String srcDir, String destDir) {
    this.srcDir = srcDir;
    this.destDir = destDir;
}

/**
 * Methode run stoesst den Kopiervorgang an
 */
public void run() {
    System.out.printIn("\nKopiere von "+ srcDir +"nach "+ destDir");
    try {
        rcopy(newFile(srcDir) , new File(destDir));
    }
    catch (IOException io) {
        System.err.printIn("Kopierfehler:"+io);
    }
    System.out.printIn("\nKopiervorgang beendet.");
}

/**
 * Rekursive Kopiermethode (kopiert Unterverzeichnisse)
 * @param source Quelle
 * @param destination Ziel
 * @throws IOExceptions wird ausgeloest, wenn etwas schieflaeuft
 */
public static void rcopy(File source, File destionation) throws IOException {
    if (source.isDirectory()) { // Fall 1: Verzeichnis
        destination.mkdir();
        String[] dirList = source.list();
        for (int = 0, i < dirList.length; i++) {
            String entryName = dirList[i];
            System.out.printIn("\nKopiere ".concat( String.valueOf(
                    String.valueOf(entryName)))); //Debug
            rcopy(new File(source, entryName) ,
                    new File (destination, entryName));
        }
    }
    else { // Fall 2: Datei
        int numberOfBytes;
        byte[] buffer = new byte[32768];
        FileInputStream in = new FileInputStream(source);
        FileOutputStream out = new FileOutputStream(destination);
        while ( (numberOfBytes = in.read(buffer)) > 0) {
            out.write(buffer, 0, numberOfBytes);
        }
        in.close(); //InputStream schliessen
        out.close(); //OutputStream schliessen
    }
}
```

Beim versuch dies zu compilieren, mit javac; ergiebt es dauern folgende Fehlermeldung:

```
class, interface, or enum expected
```

Noch genauer:

```
ch10/Transfer/TransferApp.java:4: class, interface, or enum expected            
public TransferApp (String srcDir, String destDir) {                            
       ^                                                                        
ch10/Transfer/TransferApp.java:6: class, interface, or enum expected            
        Runtime.getRuntime().addShutdownHook(t);                                
        ^                                                                       
ch10/Transfer/TransferApp.java:7: class, interface, or enum expected            
        do {                                                                    
        ^                                                                       
ch10/Transfer/TransferApp.java:9: class, interface, or enum expected            
                try {                                                           
                ^                                                               
ch10/Transfer/TransferApp.java:11: class, interface, or enum expected           
                catch (interruptedException ie) {                               
                ^                                                               
ch10/Transfer/TransferApp.java:13: class, interface, or enum expected           
        }                                                                       
        ^                                                                       
ch10/Transfer/TransferApp.java:16: class, interface, or enum expected           
}                                                                               
^                                                                               
ch10/Transfer/TransferApp.java:20: class, interface, or enum expected           
        System.out.printIn("\tTransfer <Quelle> <Ziel>");                       
        ^                                                                       
ch10/Transfer/TransferApp.java:21: class, interface, or enum expected           
        System.out.printIn("oder folgende Properties-Datei:");                  
        ^                                                                       
ch10/Transfer/TransferApp.java:22: class, interface, or enum expected           
        System.out.printIn("\t<Transfer-Verzeichnis>/prp/transfer.properties"); 
        ^                                                                       
ch10/Transfer/TransferApp.java:23: class, interface, or enum expected           
        System.out.printIn("mit folgenden Eintr\u00e4gen:");                    
        ^                                                                       
ch10/Transfer/TransferApp.java:24: class, interface, or enum expected           
        System.out.printIn("\tSrcDir <Quelle>");                                
        ^                                                                       
ch10/Transfer/TransferApp.java:25: class, interface, or enum expected           
        System.out.printIn("\tDestDir <Ziel>");                                 
        ^                                                                       
ch10/Transfer/TransferApp.java:26: class, interface, or enum expected           
        System.exit(1);                                                         
        ^                                                                       
ch10/Transfer/TransferApp.java:27: class, interface, or enum expected           
}                                                                               
^                                                                               
ch10/Transfer/TransferApp.java:29: class, interface, or enum expected           
public static void main(String args[]) {                                        
              ^                                                                 
ch10/Transfer/TransferApp.java:31: class, interface, or enum expected           
        Properties TransferPrp = new Properties();                              
        ^                                                                       
ch10/Transfer/TransferApp.java:32: class, interface, or enum expected           
        switch (args.length {                                                   
        ^                                                                       
ch10/Transfer/TransferApp.java:34: class, interface, or enum expected           
                try {                                                           
                ^                                                               
ch10/Transfer/TransferApp.java:37: class, interface, or enum expected           
                }                                                               
                ^                                                               
ch10/Transfer/TransferApp.java:43: class, interface, or enum expected           
                String srcDir = transferPrp.getProperty("srcDir");              
                ^                                                               
ch10/Transfer/TransferApp.java:45: class, interface, or enum expected           
                String destDir =transferPrp.getProperty("DestDir");             
                ^                                                               
ch10/Transfer/TransferApp.java:46: class, interface, or enum expected           
                        if (srcDir.equals(destDir)) { // Fall 1.2: Quelle = Ziel
                        ^                                                       
ch10/Transfer/TransferApp.java:48: class, interface, or enum expected           
                                helpAndTerminate(), //Fehlermeldung             
                                ^                                               
ch10/Transfer/TransferApp.java:52: class, interface, or enum expected           
                        }                                                       
                        ^                                                       
ch10/Transfer/TransferApp.java:54: class, interface, or enum expected           
                case 1: // Fall 2 : Zu wenig Parameter                          
                ^
ch10/Transfer/TransferApp.java:56: class, interface, or enum expected
                        helpAndTerminate();
                        ^
ch10/Transfer/TransferApp.java:57: class, interface, or enum expected
                        break; // Fall 2
                        ^
ch10/Transfer/TransferApp.java:58: class, interface, or enum expected
                case 2: // Fall 3: 2 Parameter
                ^
ch10/Transfer/TransferApp.java:61: class, interface, or enum expected
                            helpAndTerminate(): //Fehlermeldung
                            ^
ch10/Transfer/TransferApp.java:65: class, interface, or enum expected
                        break;
                        ^
ch10/Transfer/TransferApp.java:66: class, interface, or enum expected
                }
                ^
32 errors
```

Diese Fehlermeldung kommt immer nach folgenden Befehl:

```
javac ch10/Transfer/TransferApp.java
```

Weiß jemand warum dieser Fehler auftritt? Hat jemand eine Antwort oder ein Link der mir helfen könnte? Ich hoffe auf baldige Antworten.

MfG

JaLin

Hinweis: Ich habe genau alles abgetippt wie im Buch. Und ich hab es auch die Source komplett verstanden.


----------



## bygones (9. Sep 2009)

System.out.printIn("\nKopiere von "+ srcDir +"nach "+ destDir");
das " am Ende ist zuviel.

weiterhin ist CopyThread kein Thread... da muesste er noch meckern (es fehlt n extends Thread)


----------



## Gastredner (9. Sep 2009)

JaLin hat gesagt.:


> Hinweis: Ich habe genau alles abgetippt wie im Buch. Und ich hab es auch die Source komplett verstanden.


Das wage ich zu bezweifeln - oder wie sollte ein Buchautor die Klassendeklarationen vergessen und dies nirgendwo auffallen?
Jedenfalls fehlen die Klassendeklarationen:

```
// Deine Imports

public class TransferApp {
    // Und hier die Methoden und Klassenvariablen
}
```
Dementsprechend natürlich genauso bei CopyThread, nur ergänzt um ein "extends Thread" bei der Klassendeklaration.


----------



## Ariol (9. Sep 2009)

Wer hat eigentlich mit den ganzen static-Methoden angefangen? Das ist ja echt schlimm die letzte Zeit.


----------



## shredding (13. Mai 2010)

Das Thema ist wohl schon abgeschlossen, aber ich habe mir gerade dasselbe Buch gekauft und arbeite es durch. Ich glaube, der Fehler ist, dass du in der Zeile 5 CopuThread geschrieben hast, statt CopyThread.

Was ich nicht verstehe: Wann wird eigentlich der zweite Konstruktor in CopyThread aufgerufen? 

Ich hab mich bisher mit WebDev beschäftigt (PHP und Actionscript) und da gibt es kein überladen von Funktionen, so dass das Konzept neu für mich ist. 

Freue mich übrigens auf's Forum! Ich bin Java Newbie und hab hauptsächlich angefangen, damit ich nicht immer der bin der "nur Skriptsprachen" kann und damit ich mich in der Kantine in Zukunft auch zu den echten Programmierern setzen darf.


----------

