Anderes Fenster neu laden

Arag1145

Mitglied
Liebes Forum!
Ich versuche gerade mit einem Button in einer GUI ein anderes Fenster zu schließen, jedoch kommt immer Fehlermeldung:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

Mein (einfacher) Code hierfür:
Java:
GUIMitarbeiter guima = new GUIMitarbeiter();
guima.dispose();

Ich will das ganze bewerkstelligen, weil ich in dem einen Fenster in meine Datenbank neue Werte einfüge, welche in der anderen GUI angezeigt werden sollen. Wenn ich nun aber die Werte einfüge und das Fenster schließe, werden die Werte in der anderen GUI nicht aktualisiert.

Gibt es hierfür auch andere Lösungsmethoden?

LG 🙂
 
Moin,

ich glaube kaum, dass die SOB-Exception an genau der Stelle entsteht :noe: kein String weit und breit 😉

Poste mal den den gesamten Stacktrace und dann auch den dazu relevanten Code !

Gruß
Klaus
 
Du hast Recht, der Fehler entsteht wo anders, allerdings entsteht er nur, wenn ich versuchen will guima.dispose(); aufzurufen.
Wenn ich den anderen Code auskommentiere, der Button also nur
Java:
    GUIMitarbeiter guima = new GUIMitarbeiter();
    guima.dispose();
ausführen soll, passiert überhaupt nichts. Wieso?

lg
 
Moin,

welchen anderen Code ??? :bahnhof:
Sollen wir das raten ???

Genau da liegt dann doch (möglicherweise) der Hase im Pfeffer !

Außerdem ....
Java:
GUIMitarbeiter guima = new GUIMitarbeiter();
guima.dispose();
Du erzeugst ein Objekt (möglicherweise ein Fenster/Frame/was_auch_immer), zeigst es aber nicht an, sondern disposed es sofort???

Was soll denn das wohl Deiner Meinung nach passieren ???

Gruß
Klaus
 
Der andere Code ist für mein Problem nicht ausschlaggebend.
Ich will ein offenes Fenster mit einem anderen Fenster schließen

So:
Fenster A öffnet Fenster B, soll dabei aber offen bleiben.
Wenn ich nun einen Button in Fenster B drücke, soll ich Fenster A schließen.
 
Du musst dann dabei (oder wo auch immer) einen STRING benutzen!!
Sonst gäbe es keine StringIndexOutOfBoundsException!!

Poste wengistens mal den gesamten Stacktrace ... darin sieht man doch WO der Fehler auftritt!

Mit dem Öffnen/Schließen kann es nicht zu tun haben !!!
 
Zuletzt bearbeitet:
Vielleicht noch zur Erklärung:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.charAt(String.java:558)
at Test.ausgabe(Test.java:5)
at Test.main(Test.java:9)

Es wurde versucht auf ein einzelnes Zeichen eines Strings zu zugreifen. Das ist natürlich möglich, jedoch darf dabei der Zugriffsindex nicht außerhalb des zulässigen Bereichs liegen. Das erste Zeichen eines Strings hat den Index 0, das letzte Zeichen hat den Index n-1, wenn n die Länge des Strings ist. Dazwischen ist der Zugriff erlaubt. Hat der String die Länge 0, so ist demnach auch kein Index zulässig.
Hilfreich bei der Fehlersuche ist der ausgegebene Index der den Fehler verursacht hat. Im obigen Beispiel ist dies die -1.
Quelle: Fehlermeldungen (Java) ? Infostudium Wiki
 
hmm, auch das ist ohne Deine Code schwierig 😱

Steht dies hier etwa SO im actionPerformed des Button?
Java:
GUIMitarbeiter guima = new GUIMitarbeiter();
guima.dispose();
dann erzeugst Du hier, wie ich bereits schrieb, ein NEUES Objekt, das Du dann disposed .....

Lass' mal die Zeile mit dem "new" weg ... davon ausgehend, dass das Objekt das Du schliessen willst existiert (also an anderer Stelle schon erzeugt und angezeigt wurde) und dort auch wirklich "guima" heißt!

[EDIT]
sprich: Du halt schon das Objekt disposen, dass Du zuvor erzeugt und angezeigt hast !!
[/EDIT]

Gruß
Klaus
 
Zuletzt bearbeitet:
Nunja, ich erstelle mithilfe folgender Codestelle

Java:
			@Override
			public void actionPerformed(ActionEvent e) {
				EventQueue.invokeLater(new Runnable() {
					public void run() {
						try {
							GUINeuerMitarbeiter frame = new GUINeuerMitarbeiter();
							frame.setVisible(true);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				});
			}
		});

in Fenster A ein neues Fenster, nennen wir es Fenster B.
In diesem Fenster B liegt nun ein Button, welcher Fenster A (läuft im Hintergrund weiter) schließen soll.

Da es mit
Java:
    GUIMitarbeiter guima = new GUIMitarbeiter();
    guima.dispose();

offensichtlich nicht funktioniert (Code wird in Fenster B ausgeführt), muss es doch eine andere Lösung geben, oder?
 
Moin,

Nun ja, ich erstelle mithilfe folgender Codestelle
Java:
			@Override
			public void actionPerformed(ActionEvent e) {
				EventQueue.invokeLater(new Runnable() {
					public void run() {
						try {
							GUINeuerMitarbeiter frame = new GUINeuerMitarbeiter();
							frame.setVisible(true);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				});
			}
		});

in Fenster A ein neues Fenster, nennen wir es Fenster B.
In diesem Fenster B liegt nun ein Button, welcher Fenster A (läuft im Hintergrund weiter) schließen soll.
Ok, so weit - so gut 😉

Da es mit
Java:
    GUIMitarbeiter guima = new GUIMitarbeiter();
    guima.dispose();
offensichtlich nicht funktioniert ...
Natürlich nicht - siehe oben!

Dann sollte das actionPerformed dieses Button so ausschauen:
Java:
public void actionPerformed(ActionEvent e) 
{
    fenster_A.dispose();
}
Du musst nur sicherstellen, dass der Code zu B das Objekt A auch kennt !!

Gruß
Klaus
 
Ein letztes Mal :
Was glaubst Du, was das Schlüsselwort new bewirkt ?????
Es erzeugt an der Stelle eine neues Objekt!!
Damit kannst Du doch nicht auf Dein vorhandes Fenster A zugreifen .... :noe:

Übergib' Dein Fenster A einfach an B :
Java:
try 
{
    GUINeuerMitarbeiter frame = new GUINeuerMitarbeiter( this );
    frame.setVisible(true);
}

Du musst dan natürlich auch den Konstruktor zu Fenster B entsprechend anpassen:
Java:
... GUINeuerMitarbeiter( Fenster_A myA);

unjd dann halt:
Java:
public void actionPerformed(ActionEvent e)
{
    myA.dispose();
}

Gruß
Klaus
 
Vielen Dank für deine Hilfe und für deine Geduld, aber es funktioniert immer noch nicht.
Code:
Java:
btnNeuerArbeiter.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				EventQueue.invokeLater(new Runnable() {
					public void run() {
						try {
							GUINeuerMitarbeiter frame = new GUINeuerMitarbeiter(this);
							frame.setVisible(true);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				});
			}
		});

soweitsogut, dass Problem ist jetzt aber, dass
Java:
... new GUINeuerMitarbeiter(this)
folgendes ausspuckt:
Java:
The constructor GUINeuerMitarbeiter(new Runnable(){}) is undefined
. Er will, dass ich in Fenster B den Constructor zu
Java:
public GUINeuerMitarbeiter(Runnable runnable)
ändere, womit ich aber nicht das Fenster A schließen kann.

Vorschläge?
 
ach ja, sorry, hatte jetzt nicht an Deinen Thread gedacht ;(
Du musst dann natürlich den this-Zeiger mit Deinem Package und der Klasse spezifizieren !

Leider weiß ich nun noch immer nicht wirklich, wie beide benannt sind ...
Ich gehe jetzt mal davon aus, dass Deine Klasse in Wirklichkeit "GUIMitarbeiter" heißt und sie bspw. im Package "aaa.bbb.myApp" beheimatet ist ...

Java:
try
{
    GUINeuerMitarbeiter frame = new GUINeuerMitarbeiter( aaa.bbb.myApp.GUIMitarbeiter.this );
    frame.setVisible(true);
}

Gruß
Klaus
 
na, GottseiDank :lol:

[EDIT]
BTW: was ist denn nun mit Deiner Eingangsfrage nach der SOOB-Exception? Gelöst??
[/EDIT]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben