ModelControlFactory

midstar
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 29. Dez 2013 17:00

Re: ModelControlFactory

Beitrag von midstar »

Ah fuck, ja, hatte die Falsche genommen.. xD also editier ich den original post :)

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: ModelControlFactory

Beitrag von SophiaLi1 »

:p

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: ModelControlFactory

Beitrag von SophiaLi1 »

Also ich habe jetzt die Klasse Model statt IModel genommen, Ergebnis: auch keine Fehlermeldung, aber auch kein Spielfeld :|

midstar
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 29. Dez 2013 17:00

Re: ModelControlFactory

Beitrag von midstar »

Natürlich liegt es daran xD

Du musst alle Methoden (wenn auch leer) von IModel in Model aufführen

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: ModelControlFactory

Beitrag von SophiaLi1 »

Die GUI braucht alle Methoden des IModel (oder so ziemlich alle), um das Spielfeld aufzubauen bzw. um abzufragen, wie es aussehen soll. Ohne die ganzen Methoden funktioniert es auf keinen Fall.

midstar
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 29. Dez 2013 17:00

Re: ModelControlFactory

Beitrag von midstar »

ausserdem darf die selbsterstellte Klasse Model nicht abstract sein, und das muss sie wenn sie nicht alle Methoden von IModel überschreibt

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: ModelControlFactory

Beitrag von steffen12 »

Liebe Leute,

in der MCF sind um das Spiel zum laufen zu bringen zwei Zeilen Code einzufügen:

return new main.Model();

in die createModel wenn die eure Klasse die IModel implementiert Model heißt, wenn sie einen parameterlosen Konstruktor hat und ihr keine weiteren Methoden zu initialisierung aufrufen möchtet.

und analog für die create Controller.

Der Rückgabetyp von createModel (z.B.) ist IModel weil die GUI, die ja Instanz von Model dann bekommt, sich echt nur für die Methoden von Model interesiert, die im Interface definiert sind. Mit andern Worten IModel enthält nichts was ein Model nicht auch hätte, deshalb kann man ein Model ohne jedes Problem als IModel zurückgeben.

Und trotz aller Bereitschaft zu helfen, bitte keinen Code posten.

Viele Grüße

Gast
Gast

Re: ModelControlFactory

Beitrag von Gast »

Vielen, vielen, vielen Dank! Ihr seid einfach nur die Besten :)

Tyler Durden
Gast

Re: ModelControlFactory

Beitrag von Tyler Durden »

Hallo Jungs,

danke für die Antworten.

Ich habe versucht, diese "einfachen" 2 Zeilen von Steffen einzufügen, doch beim kompilieren kommt immer noch der Fehler "incompatible types" und dabei wird "new main.MyController();" gehighlighted.
Natürlich habe ich die Klassen MyController() und MyModel geschaffen, sonst aber nix mit ihnen gemacht

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: ModelControlFactory

Beitrag von SophiaLi1 »

Hast du IController controller = new Controller();?

Still Tyler
Gast

Re: ModelControlFactory

Beitrag von Still Tyler »

Nein, ich hatte versucht, es direkt in der return Anweisung einzubauen, wie 2 Posts über mir von steffen beschrieben. Aber hier nochmal:

Versuch "Controller controller = new Controller()"
(mit import der Klassen)

Code: Alles auswählen

  
public IController createNewIControllerInstance() {
        //TODO create and return your controller here
        Controller controller = new Controller();
        return controller ; 
}
  

Fehler: incompatible types (letzte zeile controller highlighted)

Versuch "return new main.Model()"

Code: Alles auswählen

  
public IController createNewIControllerInstance() {
        //TODO create and return your controller here
        Controller controller = new Controller();
        return new main.Model() ; 
}
  

Fehler: incompatible types

Ich glaube, es liegt an der Art, wie ich meine Model und Controller Klassen erschaffen habe: ich habe in main einfach zwei Klassen genommen und sie Controller und Model genannt. Noch 2 schöne Pfeile an die jeweiligen Interfaces und das wars xd Nein im Ernst, in der Aufgabenstellung steht die Fertigstellung von MCF vor der Implementierungsanleitung für IModel und IController, deshalb sollte ich diese beiden Klassen noch leer haben, oder etwa nicht ? (Wenn ich bei Model zB "implements IModel" schreibe oder auch nur die get/set Methoden copypaste, gibt's eine Fehlermeldung, von daher habe ich da nichts gemacht). Ich glaube, ich bräuchte also eher bei der Erstellung der Klassen hilfe, weil an 2 Zeile Code kanns ja nicht liegen...

Still Tyler
Gast

Re: ModelControlFactory

Beitrag von Still Tyler »

Whoops der zweite Ausschnitt lautet natürlich

Code: Alles auswählen

public IModel createNewIModelInstance() {
        //TODO create and return your model here
      
        return new main.Model();
    }
Also wie von steffen12 beschrieben

Benutzeravatar
5seconds
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 155
Registriert: 27. Apr 2013 10:44

Re: ModelControlFactory

Beitrag von 5seconds »

Bei deinem Model implements IModel und Controller implements IController zu schreiben, ist schon richtig. Dann musst du aber auch alle Methoden von IModel und IController implementieren. Dann funktioniert auch deine ModelControlFactory.

Tyler Durden
Gast

Re: ModelControlFactory

Beitrag von Tyler Durden »

Hi,

vergiss alles von davor.
1) ich hab Model und Controller erfolgreich compilen können. Alle Methoden haben eine leere return Anweisung, alle Attribute eine denen entsprechende return Anweisung. Idem für Controller.
2) ich habe deine zwei Zeilen Code in MCF gelassen, und das compilen klappte auch.

So.
Wenn ich jetzt die Methode in GameWindow starte, dann öffnet sich ein Fenster mit der Fehlermeldung "Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError", und dann noch etwas, was mM nach auf die Klasse und die Zeile hinweist, wo der Fehler aufgetreten ist (Model, 36,34,29). Bei Zeile 29 steht nichts, bei 34 & 36 befindet sich der Konstruktor :

Code: Alles auswählen

    public Model() 
    {
        // initialise instance variables
        
    }
. Diesen habe ich, wie man sieht, leer gelassen.


Danke im Voraus.

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: ModelControlFactory

Beitrag von steffen12 »

Hi.

Wenn du einen Stack-Overflow Fehler bekommst, dann ist die MCF höchstwahrscheinlich nicht der einzige Ort, an dem du eine Instanz von Model erzeugst. Du hast irgenwo eine Instanziierungssschleife. Das heißt die eine Instanz erzeug im Konstruktor die nächste.. endlos.

Du sollst nur in der MCF Instanzen von Model und Controller erzeugen. Und auch alle anderen Klassen (Sub-Klassen) sollen nur ein einziges mal erzeugt werden.

VG

Antworten

Zurück zu „Archiv“