Index Fehler

Tharsonius

Bekanntes Mitglied
Hallo zusammen,

ich bekomme in meinem Programm einen Fehler, hab aber keine Ahnung wie ich den abstellen kann.
Ich habe eine grobe Vermutung wo der auftritt, aber nicht die geringste Idee warum.
Ich hoffe ihr könnt mir dabei helfen.

Zuvor eine Erklärung was ich mache:
Ich verwende einen Desktop Manager und stelle auf diesem mehrere JInternalFrame dar.
Ich habe mir einen FensterManager geschrieben, der die JInternalFrame verwaltet und in einer Liste hält.
Ziel ist es, beim Beenden jedes interne Fenster einzeln zu schließen und ggf. noch einige Operationen auszuführen.
Dies funktioniert soweit auch sehr gut.

Jetzt erst einmal ein paar Klassen, damit Ihr sehr wie das ganze funktioniert:

Java:
public class InternesBasisFenster
extends JInternalFrame
implements InternalFrameListener
{
  private static final long serialVersionUID = 1L;
  protected Sitzung session;
  
  protected InternesBasisFenster(String titel, Sitzung session)
  {
    super(titel);
    this.session = session;
    addInternalFrameListener(this);
    setClosable(true);
  }
  
  public void exit()
  {
  }
  
  public final void close()
  {
    session.closeWindow(this);
  }

  public final void internalFrameClosing(InternalFrameEvent event)
  {
    session.closeWindow(this);
  }
  
  public final void internalFrameDeactivated(InternalFrameEvent event) {}
  public final void internalFrameActivated(InternalFrameEvent event) {}
  public final void internalFrameDeiconified(InternalFrameEvent event) {}
  public final void internalFrameIconified(InternalFrameEvent event) {}
  public final void internalFrameClosed(InternalFrameEvent event) {}
  public final void internalFrameOpened(InternalFrameEvent event) {}
}

Java:
public final class Sitzung
{

  //Klasse ist gekürzt


  private BasisFenster basisfenster;  // Das Basisfenster ist ein JFrame, in dem alle anderen Fenster angezeigt werden
  private FensterManager manager;
  private java.util.Timer zeitgeber;

   protected Sitzung(BasisFenster basisfenster)
  {
     this.basisfenster = basisfenster;
    manager = new FensterManager(this, basisfenster.getDesktop());
    zeitgeber = new java.util.Timer("Zeitgeber", true);
  }

  public final void closeWindow(InternesBasisFenster fenster)
  {
    manager.schliesseFenster(fenster);
  }
  
  public final void schedule(TimerTask task, int zeit)
  {
    zeitgeber.schedule(task, zeit);
  }
}


Java:
final class FensterManager
{
  private Sitzung session;
  private JDesktopPane desktop;
  private LinkedList<InternesBasisFenster> fensterliste;

  protected FensterManager(Sitzung session, JDesktopPane desktop)
  {
    this.session = session;
    this.desktop = desktop;
    fensterliste = new LinkedList<InternesBasisFenster>();
  }

  protected final void logout()
  {
    InternesBasisFenster fenster;
    while(fensterliste.isEmpty() == false)
    {
      fenster = fensterliste.remove(0);
      fenster.exit();
      fenster.dispose();
    }
  }
  
  protected final void zeigeFenster(InternesBasisFenster fenster, int posx, int posy)
  {
    fenster.setLocation(posx, posy);
    desktop.add(fenster);
    fenster.setVisible(true);
    fensterliste.add(fenster);
  }
  
  public final void schliesseFenster(InternesBasisFenster fenster)
  {
    int index = fensterliste.indexOf(fenster);
    if(index == -1)
    {
      // An dieser Stelle wird normal ein fehler ausgelöst. Fehlermanagement hier fürs Beispiel egal.
      return;
    }
    fenster.exit();
    fensterliste.remove(index);
    fenster.dispose();
  }
}


Jedes Fenster wiederum erbt von InternesBasisFenster. Die ganze Sache funktioniert soweit auch sehr gut. Jetzt aber zu meinem Problem:

Eines der Fenster muss einen Timer haben, der bei Ablauf das Fenster schließt.
Ich habe das also so gebaut:

Java:
public final class HL1
extends AP608FFBasisFenster
{

  // Klasse reduziert
  
  
  private static final long serialVersionUID = 1L;
  private AusloggTimer logoff;

  public HL1(Sitzung session)
  {
    super("Testfenster", session);
    setSize(560, 395);
    logoff = new AusloggTimer(this);
    session.schedule(logoff, 20 * 1000);
  }
  
  public final void exit()
  {
    logoff.cancel();
  }
}


Java:
public final class AusloggTimer
extends TimerTask
{
  private InternesBasisFenster fenster;
  
  public AusloggTimer(InternesBasisFenster fenster)
  {
    this.fenster = fenster;
  }
  
  public void run()
  {
    fenster.close();
  }
}


Der Timer wird korrekt eingefügt, läuft ab und ruft auch die close() Methode auf. Diese wiederum sorgt dafür,
dass der FensterManager das Fenster schließt. Dann jedoch gibt es in 95% aller Fälle einen Fehler:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 3
at java.awt.Container.getComponent(Container.java:281)
at javax.swing.JComponent.rectangleIsObscured(JComponent.java:4319)
at javax.swing.JComponent.paint(JComponent.java:1020)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5104)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
at javax.swing.JComponent._paintImmediately(JComponent.java:5052)
at javax.swing.JComponent.paintImmediately(JComponent.java:4862)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)



Mein Problem ist, dass ich keine Ahnung habe wo das ganze auftritt. Ich habe an verschiedenen Positionen bereits mittels try-catch probiert den Fehler zu finden oder auch diverse Ausgaben auf die Console ausgegeben, aber ich finde einfach die Ursache nicht.

Es scheint so, dass der FensterManager irgendwie dafür verantwortlich ist. Der Index wird aber korrekt abgerufen und herunter gezählt.

Ich habe einfach keinen Schimmer mehr was ich da noch machen kann oder wie ich das abstelle. Vorallem, weil in der Fehlerliste keine einzige meiner eigenen Klassen auftaucht.

Wenn ich das Fenster ganz nebenbei normal schließe, bevor der Timer zuschlägt, dann funktioniert alles normal und der Timer wird auch abgebrochen (dazu ist das logoff.cancel() im exit gedacht).
Aber wenn der Timer zuschlägt gibt es besagten Fehler.


Hat irgendwer von Euch eine Idee?
 
G

GladstoneGander

Gast
Du musst mehr Quelltext zeigen. Habe das Programm nachgebaut und kann den Fehler hier nicht reproduzieren.

Hast du irgendwo die paint() Methode überschrieben? Interessant wäre die Klasse AP608FFBasisFenster.
 

Tharsonius

Bekanntes Mitglied
Die paint() Methode ist im kompletten Programm niemals überschrieben. Ich verwende lediglich JLabel und JTextField auf den Oberflächen.

Das AP608FFBasisFenster ist auch vollkommen unspektakulär, das erbt lediglich vom InternesBasisFenster und stellt eine zusätzliche Methode zur Verfügung, die ich später noch brauchen werde:
Java:
public class AP608FFBasisFenster
extends InternesBasisFenster
{
	private static final long serialVersionUID = 1L;
	
	public AP608FFBasisFenster(String titel, Sitzung mastersession)
	{
		super(titel, mastersession);
	}
	
	public void freeFields()
	{
	}
}
 

Tharsonius

Bekanntes Mitglied
Wie ich oben bereits schrieb, ohne Timer funktioniert alles. Das Fenster kann ich normal schließen, es gibt keine Fehler.
Ich verwende den Fenster Manager schon länger, das ganze ist ein recht großes Projekt. Das klappt alles.

Lediglich durch das einfügen des Timers wie oben beschrieben kommt es zu diesem seltsamen Fehler.
 

henpara

Bekanntes Mitglied

hast du da mal weiter nachgeschaut?
Wo du schon von Vererbung usw. sprichst. GGF Konstruktoren noch mal genauer angeschaut.
Wo wird was geschlossen. Wird das geschlossene in irgendeiner Methode/Konstruktor nochmal gebraucht?

Ansonsten debuggen!
 
G

GladstoneGander

Gast
Kannst du vielleicht ein lauffähiges Beispiel zeigen, wo der Fehler auftritt? Deine oben geschriebene Anwendung ist ja nicht lauffähig, da z.B. die Main-Klasse fehlt, die den MainFrame erzeugt und es fehlt auch ein Methodenaufruf zum Hinzufügen der InternalFrames. Füge ich die im letzten Satz beschriebenen Dinge hinzu, so tritt bei mir kein Fehler auf. Also musst du irgendetwas anders machen wie ich.

Komponenten sind auch keine da. Welchen LayoutManager, welches LnF?

Der Fenstermanager wie du ihn hier geschrieben hast ist von jeder Schuld befreit, weil der Index-Fehler sich nicht auf die Liste mit den InternalFrames im Fenstermanager bezieht, sonder auf das Neuzeichnen des Fensters, dass unter dem automatisch geschlossenen liegt. Oder auf das Neuzeichnen des gerade geschlossenen Fensters.
 

Tharsonius

Bekanntes Mitglied
Ich hab gefunden.....

Der Fehler liegt nicht in meinem Programm, sondern an der JRE.

Ich habe einfach mal so ziemlich alles gegoogelt, was mir einfiel, jede Zeile des Fehlers etc...
Na ja, bin dann auf einen Bugreport gestoßen, der sehr ähnlich aussah und fast das gleiche Problem geschildert hat.

Ich habe daraufhin mal die installierten JREs hier in der Firma näher untersucht. Installiert ist 6u1. Der Bug wurde behoben in 6u2.

Ich habe das ganze mal mit einer aktuellen Version ausprobiert und siehe da, der Fehler ist wirklich weg, tritt nicht mehr auf.

Wer kommt denn auf die Idee, einen Fehler in der JRE zu suchen....


Nunja, ich danke Euch allen für die Unterstützung. Das Problem ist somit erledigt.


Dennoch stelle ich Euch gerne einmal eine lauffähige Version zur Verfügung. Die muss ich aber erst basteln, da ich da ein paar Dinge entfernen muss, reiche ich heute Nachmittag nach.



Edit: Bezüglich des Fenstermanagers, der arbeitet korrekt, genau so wie er soll. Das hat der debugger und auch etlcihe Stunden Fehlersuche eindeutig ergeben. Ich habe an verschiedensten stellen einfach try{}catch(Exception e){} eingefügt, nur um überhaupt die Stelle zu finden, die den Fehler wirft. Das ist mir nicht gelungen. Es scheint, dass durch den Bug in der JRE ein Fehler in der run Methode geworfen wird, der irgendwie ganz seltsam Zugriff auf das Fenster nimmt bzw. den Index. Ganz genau kann ich das nicht reproduzieren. Dazu fehlen mir die Kenntnisse der JRE Klassen.
 
Zuletzt bearbeitet:

Tharsonius

Bekanntes Mitglied
Ich habe mal die Sourcen soweit zusammen gestrichen, dass ich Euch das geben kann.

Ist ansich lauffähig, nur die Bibliotheken liegen nicht bei. Hier sind eventuell noch kleine Änderungen notwändig. Aber das seht ihr ja dann.
 

Anhänge

  • src.zip
    40,4 KB · Aufrufe: 1


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thermaler Index 16 out of bounds for length 16 Allgemeine Java-Themen 22
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L Array und Index Allgemeine Java-Themen 26
H Collections Aktuellen Index generell und nach Sortierung ausgeben Allgemeine Java-Themen 6
Y ArrayListe eingegebenen index entfernen Allgemeine Java-Themen 1
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
X Lucene index on disk Allgemeine Java-Themen 2
B Hirsch-Index berechnen Allgemeine Java-Themen 11
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
S Char-index aller Buchstaben..? Allgemeine Java-Themen 3
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
GianaSisters Klassen ArrayList Index Integer int Allgemeine Java-Themen 5
Jats ArrayList-Error Index: 1 Size:1 - Bitte um Hilfe Allgemeine Java-Themen 36
A Index Datei aus HTML-Dateien Allgemeine Java-Themen 7
N Inverted index / inverted list Allgemeine Java-Themen 2
G Hibernate search (Lucene) - Index wird nicht rechtzeitig erzeugt? Allgemeine Java-Themen 2
Developer_X Array Index Out of Bounds Exception Allgemeine Java-Themen 1
B TreeMap Index !!! Allgemeine Java-Themen 6
J fireIndexedPropertyChange(...) Wie gelangt man an den Index? Allgemeine Java-Themen 2
L kann in einem array der 1. index größer als der 2. sein? Allgemeine Java-Themen 10
M Java applet zusammen mit DHTML z-index Problem Allgemeine Java-Themen 2
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
M Index eines Arrays ermitteln und als Integer ausgeben Allgemeine Java-Themen 7
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Fehler: <ID> erwartet Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
Pinhg Discord JDA Bot - Fehler Allgemeine Java-Themen 3
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
L Fehler mit Boolean. (Glaube ich zumindest) Allgemeine Java-Themen 6
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
O Fehler bei Variablen Allgemeine Java-Themen 2
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
C Fehler bei der Benutzung von itextpdf Allgemeine Java-Themen 1
U Fehler beim Compillieren Allgemeine Java-Themen 13
x46 String Format Fehler Allgemeine Java-Themen 2
bueseb84 Fehler beim Import von Maven Dependencies aus lokalem artifactory Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Fehler bei IF abfrage Allgemeine Java-Themen 8
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
M Einheitenrechner - Fehler Allgemeine Java-Themen 12
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Denk-Fehler? Allgemeine Java-Themen 4
A Finde den Fehler nicht. Allgemeine Java-Themen 7
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
D Unbekannter Fehler Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
I Fehler beim Ant-Package erstellen mit Java 9 Allgemeine Java-Themen 1
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
T OOP Fehler im Design Allgemeine Java-Themen 9
Thallius Unfassbarer Fehler. Brauche Ideen zum Debuggen Allgemeine Java-Themen 9
U Eclipse MANIFEST fehler Allgemeine Java-Themen 7
I Fehler bei HashMaps Darstellung Allgemeine Java-Themen 10
R Classnotfoundexception Fehler Allgemeine Java-Themen 3
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
N Prim's Algorithm - wo ist der Fehler? Allgemeine Java-Themen 3
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
M Line-Fehler Allgemeine Java-Themen 8
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
RalleYTN Merkwürdiger Fehler mit JFrame im Vollbild Allgemeine Java-Themen 4
V AudioInputStream Fehler Allgemeine Java-Themen 1
J Interpreter-Fehler Fehler beim Verschlüsseln Invalid AES key length Allgemeine Java-Themen 1
G Fehler mit Vector Allgemeine Java-Themen 3
F Java Fehler "buildTableModel" Allgemeine Java-Themen 3
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
DanielsLPecke Input/Output Arduino komischer Fehler. Allgemeine Java-Themen 38
V JavaFX Fehler beim Starten einer Jar Allgemeine Java-Themen 7
S Hashtable Fehler Allgemeine Java-Themen 14
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
K Was ist mein Fehler? Allgemeine Java-Themen 2
Tausendsassa Compiler-Fehler Fertiges Programm mit Fehler Allgemeine Java-Themen 10
B Eclipse Nach Export einer .jar Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 5
K Fehler beim erstellen von .jar Datei Allgemeine Java-Themen 3
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Eclipse - Fehler: Hauptklasse de.xyz.init.MeineKlasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 2
Seikuassi Swing Stehe auf dem Schlauch...(BufferedReader_Writer-Fehler?) Allgemeine Java-Themen 4
M Eclipse Fehler beim Installieren des Plugins "Jigloo" Allgemeine Java-Themen 12
A Eclipse - Fehler beim "RUN" - "Unable to Launch - The selection cannot be launched" Allgemeine Java-Themen 6
B Fehler bei einem Programm Allgemeine Java-Themen 10
F HILFEEEEEE JAVA Fehler - Tiny Umbrella Allgemeine Java-Themen 1
N JavaFX IndexOutOfBounds-Fehler Allgemeine Java-Themen 11
N GPIB - Fehler: Unable to open device Allgemeine Java-Themen 1
S Ganzes Programm "stucked" - JVM-Fehler? Allgemeine Java-Themen 2
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben