Exceptions selber erstellen

Countertenor

Mitglied
Hallo liebe Leute,

Ich muss für die Schule eine eigene Ausnahme entwerfen und programmieren, wir benutzen dazu Greenfoot.
Ich hab mich nun mit dem Thema sehr befasst aber weiss nicht wie man selber sowas erstellen kann.
Zum Projekt. Es handelt sich um eine Giraffe die Bäume und Cactus fressen kann und dieses wird gezählt.

Meine Idee ist es, das wenn Greenfoot ein .png Bild einfügen will, und dieses nicht im Ordner ist, eine Fehler-Meldung kommt, und zusätzlich als 2. Ausnahme statt dieser Fehlermeldung er durch die Ausnahme ein anderes Bild nimmt oder dieses auf dem PC sucht.( Falls das geht) Als Beispiel wollte ich imageWESTUNTEN = new GreenfootImage("GiraffeWestUnten.png"); nehmen.

und eine 3 Ausnahme würde ich gerne entwerfen, das wenn die Tasten links und oben gleichzeitig gedrückt sind, die Giraffe nicht in eine richtung weiter läuft sondern stehen bleibt.

Hier der Quelltext der Klasse Giraffe

Java:
/**
 * Write a description of class Giraffe here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Giraffe extends Animal
{

      private GreenfootImage imageNORD;
      private GreenfootImage imageNORDUNTEN;
      private GreenfootImage imageOST;
      private GreenfootImage imageOSTUNTEN;
      private GreenfootImage imageSUED;
      private GreenfootImage imageSUEDUNTEN;
      private GreenfootImage imageWEST;
      private GreenfootImage imageWESTUNTEN;
      private int TreesEaten;
      private int CactusEaten;
      
      
    /**
     * Act - do whatever the Giraffe wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public Giraffe()
    {
       imageNORD = new GreenfootImage("GiraffeNord.png");
       imageNORDUNTEN = new GreenfootImage("GiraffeNordUnten.png");
       imageOST = new GreenfootImage("GiraffeOst.png");
       imageOSTUNTEN = new GreenfootImage("GiraffeOstUnten.png");
       imageSUED = new GreenfootImage("GiraffeSued.png");
       imageSUEDUNTEN = new GreenfootImage("GiraffeSuedUnten.png");
       imageWEST = new GreenfootImage("GiraffeWest.png");
       imageWESTUNTEN = new GreenfootImage("GiraffeWestUnten.png");
       TreesEaten = 0;
       CactusEaten = 0;
       
       
    
                 
    }
       
    
    
       public void act() 
    {
        checkKeypress();
        eatGras();
        eatTree();
        System.out.println("Ich hab schon " + TreesEaten + " Trees gefressen!");
        System.out.println("Ich hab schon " + CactusEaten + " Cactus gefressen!");
        
         
        if(CactusEaten==2)
        { 
          ((Level1) getWorld()).gameOver();
        }
   
        
       
    }
    

     
    /**
     * Prüft ob eine Steuertaste auf der Tastatur gedrückt wurde.
     * Wenn ja, reagiert die Methode entsprechend.
     */
        public void checkKeypress()
        {
        if (Greenfoot.isKeyDown("up")) 
        {
            oben();
            setImage(imageNORD);
        }
        
        if (Greenfoot.isKeyDown("right")) 
        {
            rechts();
            setImage(imageOST);
        }
        if (Greenfoot.isKeyDown("down")) 
        {
            unten();
            setImage(imageSUED);
        }
        if (Greenfoot.isKeyDown("left")) 
        {
            links();
            setImage(imageWEST);
        }
        
        /**
         * Die Taste "-" senkt den Kopf nach unten.
         */
        
        if (getImage() == imageNORD && Greenfoot.isKeyDown("-") )
        {
            setImage(imageNORDUNTEN);
            unten();
            }   
        if (getImage() == imageOST && Greenfoot.isKeyDown("-") )
        {
             setImage(imageOSTUNTEN);
             links();
            }
        if (getImage() == imageSUED && Greenfoot.isKeyDown("-") )
        {
            setImage(imageSUEDUNTEN);
            oben();
        }
        if (getImage() == imageWEST && Greenfoot.isKeyDown("-") )
        {
            setImage(imageWESTUNTEN);
            rechts();       
        }
        
        /**
         * Verhindert das die Giraffe quer laufen kann.
         */
        
        if (Greenfoot.isKeyDown("right") && Greenfoot.isKeyDown("down")) 
        {
            links();
        }
        if (Greenfoot.isKeyDown("right") && Greenfoot.isKeyDown("up")) 
        {
            unten();
        }
        if (Greenfoot.isKeyDown("left") && Greenfoot.isKeyDown("down")) 
        {
            oben();
        }
        if (Greenfoot.isKeyDown("left") && Greenfoot.isKeyDown("up")) 
        {
            unten();
        }
              
    }
    
    /**
     * Prüft, ob wir auf ein Cactus getroffen sind, wenn der Kopf unten ist.
     * Wenn ja, wird dieses gefressen. Wenn nein, passiert nichs.
     */
    public void eatGras()
    {
        if ( canSee(Cactus.class)  && Greenfoot.isKeyDown("-"))
        {
            eat(Cactus.class);
            countFood();
            CactusEaten = CactusEaten + 1; 
        }
    }
    
    /**
     * Prüft, ob wir auf einen Tree getroffen sind, wenn der Kopf oben ist.
     * Wenn ja, wird dieser gefresse. Wenn nein, passiert nichs.
     */
    public void eatTree()
    {
        if ( canSee(Tree.class) && !Greenfoot.isKeyDown("-") && Greenfoot.isKeyDown("."))
        {
            eat(Tree.class);
            countFood();
            TreesEaten = TreesEaten + 1; 
        }      
    }
        
        public boolean foundTree()
{
   Actor Tree= getOneIntersectingObject(Tree.class);
   if (Tree != null) 
  {
     return true;
   }
   else 
  {       
     return false;   
   }

   
   
       
}
  


    
 
 
public int getTreesEaten()
{
   return TreesEaten;
 }
 
 public int getCactusEaten()
{
   return CactusEaten;
 }
 
 
public void countFood()
{
    ((Level1) getWorld()).counter.add(1);
}
 
 
 }
 
N

nillehammer

Gast
Für behandelte Exceptions (der Programmierer muss sie mit try-catch abfangen oder weiter werfen):
[Java]
public final MeineGiraffenException extends Exception {
...
}
[/Java]
Für unbehandelte Exceptions (der Programmierer muss sie nicht mit try-catch abfangen oder weiter werfen):
[Java]
public final MeineGiraffenException extends RuntimeException {
...
}
[/Java]
 

Countertenor

Mitglied
Danke für deine antwort....

also das mit unchecked und checked exceptions weiss ich schon, nur stellt sich jetzt meine frage wie ich es in mein code einbau. wo muss ich den try block hin machen und was muss ich reinschreiben damit wenn das bild nicht gefunden wurde eine meldung kommt oder er weiter sucht....

Habs mir in einem Java buch angeguckt und in bestimmt 7 verschiedenen online version aber ich steig da nicht durch.
 

Landei

Top Contributor
Exceptions sind nichts besonderes, dass einzige, was man wissen muss, ist dass man in Java nur das "werfen" kann, was Throwable implementiert. Üblicherweise erbt man einfach von Exception oder einer geeigneten Unterklasse (Error, RuntimeException...), wie bei jeder anderen Klasse auch:

Java:
public class FooException extends Exception {
   public FooException(String message) {
      super(message);
   }
  //eventuell weitere Konstruktoren
}

Wenn man will, kann man natürlich auch fehlerspezifische Daten in der Fehlerklasse speichern.

Details : Galileo Computing :: Java ist auch eine Insel - 6 Exceptions und dabei insbesondere Galileo Computing :: Java ist auch eine Insel - 6 Exceptions
 

timbeau

Gesperrter Benutzer
Java:
File bild = new File("...");
try {

If(!bild.exists()) 
throw new MeineEigeneSpezielleException(...);

}
catch (MeineEigeneSpezielleException e) {
bild = new File("standartpfad");
}

Als Bsp und ungetestet.
 

Countertenor

Mitglied
Hab mir das alles nun angeguckt und versucht zu verstehen aber ich komm immer noch nicht dahint wie ich es bei mir einbau. Muss sagen ich bin echt Anfänger, und bei Greenfoot wird einem ja alles soweit vorgegeben^^

Ich habs jetzt so verstanden das ich eine Klasse erstellen muss, zb, Meine exception.

Aber wo schreib ich den try catch Block hin?

In die Klasse Giraffe, weil die das Bild öffnen soll?
 

Landei

Top Contributor
Na da wo der Fehler "passieren" kann:
Java:
try {
  vorbereiten();
  bankraub(); //das kann schiefgehen, also eine Exception liefern
  beuteVerstecken(); //das würde übersprungen, wenn es schief geht
} catch (ErwischtException ex) {
  //falls es schiefgeht 
  gefängnisAusbruch();
}
//ansonsten geht es gleich hier weiter
 

Countertenor

Mitglied
Okay das hab ich verstanden^^

also in try kommt die methode was er machen soll aber schief gehen kann, also hier das bild öffnen, die ist aber nicht da.

So jetzt soll er es dann bei c:\ öffnen.

Nur meint er das im Try blcok keine anweisung gibt die diese hervorrufen kann, also bin ich nun überfragt was ich in try schreiben soll


Java:
 public void main ()
    {
        try
        {
          imageWESTUNTEN = new GreenfootImage("GiraffeWestUnten.png");

        }
        catch (FileNotFoundException e) {
            bild = new File("C:\\GiraffeWestUnten.png");
        }
        
    }
    
}
 

chalkbag

Bekanntes Mitglied
Deine Klasse GreenfootImage muss mitteilen, dass sie in der Lage ist eine entsprechende Exception zu werfen. Hierfür würde es reichen im Konstruktor ein throws FileNotFoundException anzuhängen.


Java:
public GreenfootImage(String filename) throws FileNotFoundException{
....
}


Aber wolltest du nicht eigenen Exception werfe, vielleicht hab ich auch was überlesen.
 

Neue Themen


Oben