Exception: Adding a window to a container

Status
Nicht offen für weitere Antworten.
T

texton

Gast
Ich habe folgende Klassen (gekürzt) in einem MVC-Schema erstellt:
Code:
public class Main
implements IF
{
	public static void main( String[] saArgs )
	{
		// Instantiate a controller with its view. 
		new Controller( new Model(), new View() ).setVisible( true ); // #2
	}
}
Code:
public class Model
{
	public Model()
	{}
}
Code:
public class View
extends JFrame
implements IF
{
	private JPanel panDesktop = null;

	public View()
	{
		super();
		initialize();
	}

	private void initialize()
	{
		this.setSize( 700, 400 );
		this.setContentPane( getPanDesktop() );
	}

	private JPanel getPanDesktop()
	{
		if( null == panDesktop )
		{
			panDesktop = new JPanel( new BorderLayout() );
		}
		return panDesktop;
	}
}
Code:
public class Controller
extends JFrame
implements IF
{
	final Model oModel;
	private final View oView;

	public Controller( Model oNewModel, View oNewView )
	{
		super();
		this.oModel = oNewModel;
		this.oView = oNewView;
		setContentPane( this.oView ); // #1
	}
}
Beim Ausführen erhalte ich die Meldung:
Code:
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
mit Verweis auf die Codezeilen #1 und #2
Ich komme nicht dahinter, wie ich es richtig machen muss.
 
S

SlaterB

Gast
2x extends JFrame in einem Programm, welches nur ein Fenster anzeigen soll,
ist naturgemäß allgemein nicht gut,

-----

konkret:
an setContentPane() darst du kein JFrame übergeben, lasse View z.B. ein JPanel sein

die Befehle
> this.setSize( 700, 400 );
> this.setContentPane( getPanDesktop() );
in View müssen dann wahrscheinlich umgebaut werden, der letztere auf jeden Fall,

JFrame in JFrame geht nicht,
schau die JInternalFrame an, wenn du verschachtelte Fenster anzeigen willst
 

Ebenius

Top Contributor
:autsch: Du fügst Deine View (ist ein JFrame) Deinem Controller (auch ein JFrame) hinzu. Man kann Komponenten auf ein Frame packen. Aber keine Fenster!

Anbei: Du hast irgendwas mit MVC in den falschen Hals bekommen. Ein Controller ist doch kein JFrame... Das ergibt genau null Sinn. Den Rest habe ich mir nicht angeschaut.

Ebenius
 
T

texton

Gast
Das MVC-Schema ist soweit richtig und wurde erfolgreich woanders schon angewendet.

Ursache des Problems war tatsächlich der doppelte Frame. Der View-Teil ist als virtuelle Klasse mit dem Visual Editor angelegt worden. Ich hatte als Basisfenster einfach JFrame ausgewählt, ohne daran zu denken, dass ich dies schon für den Controller-Teil gemacht hatte. Nach der Korrektur auf ein JPanel funktioniert jetzt alles.

Danke an euch beide!
 
T

texton

Gast
Was konkret soll am Schema falsch sein? Es ist seit Jahren im Einsatz und wurde von einem Experten geschrieben.
 

Ebenius

Top Contributor
Anonymous hat gesagt.:
Es ist seit Jahren im Einsatz und wurde von einem Experten geschrieben.
"Controller extends JFrame". Das finde ich falsch. :)

Aber vielleicht ist der Name Controller hier aus einem anderen Grund verwendet worden, den ich nur nicht verstehe.
 
T

texton

Gast
Auch ich finde den JFrame im Controller-Teil merkwürdig, wo doch nur der View-Teil für die Darstellung zuständig sein soll. Ich habe aber nicht so viel Erfahrung mit MVC-Schemas und habe deshalb ein funktionierendes für meine Zwecke abgewandelt.

Den Quellcode habe ich übrigens an folgenden Stellen abgewandelt:
Code:
public class View
extends JPanel
implements IF
{
   public View()
   {
      super();
      initialize();
   }

   private void initialize()
   {
      this.setSize( 700, 400 );
      this.setLayout( new BorderLayout() );
   }
}
und
Code:
public class Controller
extends JFrame
implements IF
{
   final Model oModel;
   private final View oView;

   public Controller( Model oNewModel, View oNewView )
   {
      super();
      this.oModel = oNewModel;
      this.oView = oNewView;
      setPreferredSize( new dimension( 700, 400 ) );
      setSize( 700, 400 ); // zusammen mit obiger Zeile, weil Java sonst Zicken macht
      setContentPane( this.oView );   }
}
Wie sollte ich den Code abändern, damit im Controller-Teil das "extends JFrame" entfällt?
 

Ebenius

Top Contributor
Anonymous hat gesagt.:
Wie sollte ich den Code abändern, damit im Controller-Teil das "extends JFrame" entfällt?
Würde ich gar nicht. Ich würde die Klasse einfach MainFrame oder dergleichen umbenennen. Und da wir beim Umbenennen sind: Sofern "IF" ein Interface von Dir ist; der Name ist Mist, weil sagt nix.

Ebenius
 
S

SlaterB

Gast
je nach Aufgabe des Controllers könnte auch der View direkt das JFrame sein und der Controller von nix erben
 
T

texton

Gast
@Ebenius: Ja, "IF" steht für mein Interface. Ich habe alle Namen im Beispiel gekürzt; real sind sie natürlich aussagekräftiger.

@Ebenius + SlaterB: Der Controller hat im MVC-Schema die Aufgabe, Aktionen des Users zu verarbeiten, während das View für die Darstellung des Interfaces zuständig ist. Dennoch muss der Controller ja auf das in View definierte User Interface zugreifen können, denn wie sonst sollte er erfahren, ob er was zu tun hat? Deshalb die Art des Aufrufs in der Main.

Wenn ich das umsetzen würde
je nach Aufgabe des Controllers könnte auch der View direkt das JFrame sein und der Controller von nix erben
wie sollte dann der Controller auf Ereignisse reagieren können? (Umgeschriebenes Beispiel wäre dann hilfreich.)
 
S

SlaterB

Gast
was heißt denn 'umgeschrieben', deine Vorgabe ist doch gänzlich ohne Ereignisbehandlung ;)

die technische Ereignisbehandlung, also einen ActionListener an einem Button zu adden, kann im View stattfinden,
nur sollte die dann nicht wissen, was zu tun ist, sondern dem Controller beispielsweise mitteilen:
controller.loginButtonGedrueckt();

ob dabei schon beispielsweise die Strings aus dem Name- + Passwort-Feld mitübergeben werden,
oder ob der Controller das selber bei der View noch abfragen muss, ist eher nebensächlich,

wichtig ist dann, dass der Controller die logische Arbeit übernimmt wie DB-Abfragen nach dem User (oder einfach nur im 'Model' nachschauen),
Rechtekontrolle, irgendwelche anzuzeigenden Daten laden usw.,

das alles ist unabhängig von dem View, beispielweise bei einer Webanwendung mit HTML-Seiten genauso auszuführen,
daher ein Fall für eine Klasse, die nicht von JFrame erbt

gewisse Übergangsaufgaben wie das erwähnte Einlesen von Daten oder Anzeige von Ergebnissen sind fließend zwischen Controller und View anzusiedeln
 
T

texton

Gast
@SlaterB: Ich versuche mal alles zu verstehen (nicht leicht bei den streitenden Mitarbeitern hier ...).

Aufrufe wie
controller.loginButtonGedrueckt();
sind klar.
das alles ist unabhängig von dem View, (...), daher ein Fall für eine Klasse, die nicht von JFrame erbt
Das war ja genau meine Frage aus dem letzten Post. Mein controller erbt derzeit noch von JFrame. Ich sehe derzeit nicht, wie ich es so umstellen kann, dass das nicht mehr der Fall ist. Dazu müsste doch auch die main angepasst werden, oder? Deshalb meine Bitte, mir hier konkrete Hilfe zu geben, damit mein Controller sich wirklich nur um die Verarbeitung kümmert.
 
S

SlaterB

Gast
Code:
public class Test
{
    public static void main(String[] args)
    {
        View v = new View();
        new Controller(new Model(), v);
        v.setVisible(true);
    }
}


class Controller
{
    final Model oModel;
    private final View oView;

    public Controller(Model oNewModel, View oNewView)
    {
        super();
        this.oModel = oNewModel;
        this.oView = oNewView;
    }
}


class View
    extends JFrame
{
    public View()
    {
        super();
        initialize();
    }

    private void initialize()
    {
        this.setSize(700, 400);
        this.setLayout(new BorderLayout());
    }
}


class Model
{
    public Model()
    {
    }
}
 
T

texton

Gast
Vielen Dank für die Geduld :applaus: . Ja, ist tatsächlich ganz einfach :oops: (sich im Büro hier zu konzentrieren ist schon ein Kunststück :cry: .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Exception: java.lang.ClassCastException AWT, Swing, JavaFX & SWT 2
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
R AWT no such child Exception AWT, Swing, JavaFX & SWT 7
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
VfL_Freak AWT Exception in der Eventqueue AWT, Swing, JavaFX & SWT 8
A Swing Null Pointer Exception obwohl Objekt initialisiert AWT, Swing, JavaFX & SWT 21
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
H JavaFX Ein View vorschalten Exception AWT, Swing, JavaFX & SWT 7
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
M 3D-Grafik Mac Java 3D in Eclipse Exception AWT, Swing, JavaFX & SWT 0
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
I Opencv Imgproc.floodfill exception AWT, Swing, JavaFX & SWT 1
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
T Gui Exception AWT, Swing, JavaFX & SWT 2
X Auf Fensterklasse zugreifen (Nullpointer Exception) AWT, Swing, JavaFX & SWT 2
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
J Einträge aus Table löschen ohne Exception AWT, Swing, JavaFX & SWT 6
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4
N Swing Exception: Comparison method violates its general contract! AWT, Swing, JavaFX & SWT 13
S Exception bei BufferStrategy AWT, Swing, JavaFX & SWT 8
H Swing Exception's und MVC AWT, Swing, JavaFX & SWT 35
R Swing Mit Swing eine throws Exception Methode öffnen AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
K AWT DataBuffer in DataBufferInt Exception AWT, Swing, JavaFX & SWT 2
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
O Immer Exception in AWT-EventQueue-0 AWT, Swing, JavaFX & SWT 5
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
F Swing Seltsame Exception AWT, Swing, JavaFX & SWT 5
R Swing Files auflisten (JButton, JList, Exception) AWT, Swing, JavaFX & SWT 4
V LookAndFeel Nullpoint Exception AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
hdi SWT Zwei mal Shell öffnen = Exception AWT, Swing, JavaFX & SWT 6
N Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread AWT, Swing, JavaFX & SWT 4
O Probleme beim Zeichnen und AWT-Event-Queue-0 Exception AWT, Swing, JavaFX & SWT 5
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Bild zeichnen lassen aus array, null pointer Exception AWT, Swing, JavaFX & SWT 2
B JTable ValueChanged verursacht Exception AWT, Swing, JavaFX & SWT 3
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
Daniel_L JTable, (Auto-)RowSorter und NullPointer-Exception AWT, Swing, JavaFX & SWT 6
M Exception in eine JTextArea anzeigen AWT, Swing, JavaFX & SWT 7
G Kann mir jemand diese Exception erklaeren? AWT, Swing, JavaFX & SWT 8
T AWT Exception AWT, Swing, JavaFX & SWT 5
A Exception beim LineWrapping AWT, Swing, JavaFX & SWT 16
P Für mich unverständliche Exception AWT, Swing, JavaFX & SWT 3
N JList - Nullpointer Exception AWT, Swing, JavaFX & SWT 4
Lony AbstractTableModel Exception in thread "AWT-EventQueue- AWT, Swing, JavaFX & SWT 3
T Warum schmeißt das eine Exception? AWT, Swing, JavaFX & SWT 6
I EventDispatchThread Exception AWT, Swing, JavaFX & SWT 5
M Problem: "ArrayIndexOutOfBounds Exception" AWT, Swing, JavaFX & SWT 11
C Out of Bounds Exception, Array of JTextField AWT, Swing, JavaFX & SWT 6
B JTable Vector Exception bei eigenem CellEditor AWT, Swing, JavaFX & SWT 3
D Seltsame AWT-Exception AWT, Swing, JavaFX & SWT 2
M Button und Exception mit NetBeans AWT, Swing, JavaFX & SWT 3
P paint null pointer exception AWT, Swing, JavaFX & SWT 3
M Exception Meldung aus Thread an jTextField1 übergeben AWT, Swing, JavaFX & SWT 6
A Null pointer exception beim Neuzeichnen AWT, Swing, JavaFX & SWT 4
R DataVector bei TableModel - Class Cast Exception AWT, Swing, JavaFX & SWT 9
G Drag & Drop bzw. Data Transfer - Exception nach Drag AWT, Swing, JavaFX & SWT 1
K Exception mit "Unknown Source" AWT, Swing, JavaFX & SWT 5
Z jar-File mit SWT - Exception AWT, Swing, JavaFX & SWT 4
F Habe Problem mit dem Abfangen einer Exception AWT, Swing, JavaFX & SWT 10
V Null Pointer Exception bei JTextField setText AWT, Swing, JavaFX & SWT 25
T Programm funkt. nicht - Exception AWT, Swing, JavaFX & SWT 7
A Exception in thread "AWT-EventQueue-0" java.lang.N AWT, Swing, JavaFX & SWT 4
G Exception in JList oder JTextArea AWT, Swing, JavaFX & SWT 9
M java headless exception AWT, Swing, JavaFX & SWT 5
O Exception abfangen AWT, Swing, JavaFX & SWT 19
J Fehlermeldung adding a window to a container AWT, Swing, JavaFX & SWT 9
izoards Java FX Window Event SHOWING AWT, Swing, JavaFX & SWT 17
ruutaiokwu SWT "Google Window Builder" tut keine jar's ins Projekt rein bei SWT-Projekt AWT, Swing, JavaFX & SWT 22
L JavaFX AnchorPane an die Größe der Scene oder Window binden? AWT, Swing, JavaFX & SWT 3
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
S Window Builder AWT, Swing, JavaFX & SWT 20
I Modal Window AWT, Swing, JavaFX & SWT 26
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
C JavaFX Window-Position AWT, Swing, JavaFX & SWT 3
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
Z Window Builder - Labels mit setText befüllen AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben