# Exception in thread "AWT-EventQueue-1"



## kurm_de (3. Dez 2012)

Hallo,

ich habe das gleiche Problem wie in diesem Thema beschrieben:
http://www.java-forum.org/allgemeine-java-themen/39306-awt-eventqueue-1-java-lang-arrayindexoutofbounds.html#post245020

Folgende Meldung bekomme ich:


> Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
> at java.util.Vector.elementAt(Vector.java:470)
> at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
> at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderRenderer(BasicTableHeaderUI.java:693)
> ...




Hier noch der Code den ich hab laufen lassen:

```
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumnModel;


public class anzeige extends JApplet {

	JButton button;
	JPanel panel, paneloben;
	JScrollPane scrollPane;
	JLabel titel = new JLabel(" M a t A n  -  2 0 1 3               ");
	JLabel statuszeile = new JLabel("");
	
	String[] spaltenbeschriftung = {"Kürzel", "Produkt", "Bezeichnung", "Menge", "Status"};
		
	JTable table;
	DefaultTableModel tabModel;
	TableColumnModel columnModel;
	
	int x=0;
		
	
	public void init(){
			
		tabModel = new DefaultTableModel();
		tabModel.setRowCount(x);
		table = new JTable(tabModel);
		
		tabModel.setDataVector(ladeData(), spaltenbeschriftung);
		
		table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
		
		columnModel = table.getColumnModel();
							
		paneloben = new JPanel();
		paneloben.setLayout(new BoxLayout(paneloben, BoxLayout.X_AXIS));
		paneloben.add(titel);
		
		
		panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		
		scrollPane = new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		scrollPane.setViewportView(table);
	
		panel.add(paneloben);
		panel.add(scrollPane);
		panel.add(statuszeile);
		add(panel);
		setVisible(true);
		validate();
		
		refresh();
		
		while (true) {
			try{
		    	refresh();
    			Thread.sleep(200);
    		}catch(InterruptedException e){System.out.print(e);}
		}
	}
	
	
	public void refresh(){
		
		System.out.println("refresh");
				
		tabModel.setDataVector(ladeData(), spaltenbeschriftung);
		
		columnModel.getColumn( 0 ).setPreferredWidth( 50 );
		columnModel.getColumn( 1 ).setPreferredWidth( 140 );
		columnModel.getColumn( 2 ).setPreferredWidth( 440 );
		columnModel.getColumn( 3 ).setPreferredWidth( 50 );
		columnModel.getColumn( 4 ).setPreferredWidth( 100 );
		
	}
	
	
	
	public String[][] ladeData(){
		x=0;
		String[][] data = new String[200][5];
		
		try {
			File DatenDatei = new File(getParameter("DateiPSL"));
			FileReader fileReader = new FileReader(DatenDatei);
			BufferedReader reader = new BufferedReader(fileReader);
			
			String zeile = null;
						
			String stat[] = ladeStatus();

			while ((zeile = reader.readLine()) != null) {
				
				if(zeile.equals("")) {
				} else{
					String cutter = ("\\|#\\|");
					String[] zsplit = zeile.split(cutter);
					data[x][0] = zsplit[6];
					data[x][1] = zsplit[2];
					data[x][2] = zsplit[3];
					data[x][3] = zsplit[4];
					
					for(int i=1;i<= Integer.parseInt(stat[0]);i++){
						String[] statSplit = stat[i].split(cutter);
						if(statSplit[0].equals(zsplit[0])){
							data[x][4] = statSplit[1];
							break;
						}
					}
					
					x=x+1;
					
				}
			
			}
			x--;
			reader.close();
			
	
		} catch (IOException e) {
			e.printStackTrace();
		}
		return data;
	}
	
		
	
	public String[] ladeStatus() {
			
		String[] status = new String[500];
		int y=1;
	
		try {
			File StatusDatei = new File(getParameter("DateiStatus"));
			FileReader fileReader = new FileReader(StatusDatei);	
			BufferedReader reader = new BufferedReader(fileReader);
			String zeile = null;

			while ((zeile = reader.readLine()) != null) {;
				
				if(zeile.equals("")) {
				} else{
					status[y] = zeile;							
				
					
					status[0]=String.valueOf(y);
					y=y+1;
				}
				
			}
			reader.close();
			
		}catch (IOException e) {
			e.printStackTrace();
		}
			
		return status;	
	
	}
	


}
```

Die Meldungen kommen unregelmäßig, aber öfters wenn ich wild in der Tabelle rumklicke.
Wenn ich die Zeile

```
tabModel.setDataVector(ladeData(), spaltenbeschriftung);
```
auskommentiere sind auch die Meldungen weg.

Das Problem liegt also bei dem Array und wie ich es an .setDataVector übergebe, aber was mache ich falsch?


viele Grüße
kurm_de


----------



## JCODA (3. Dez 2012)

Ich vermute mal, das ist mal wieder der EDT:

javax.swing (Java Platform SE 6)

=> 


```
SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                //Hier muss dein Code rein, der SwingComponenten verändert.
            }
        });
```

Achso, und die Endlosschleife in der init()-Methode sieht auch fragwürdig aus. Ich würde entweder einen Timer oder noch besser insgesamt einen SwingWorker (Java Platform SE 6) verwenden.


----------



## KrokoDiehl (5. Dez 2012)

Hallo. Man beachte die obersten Zeilen des Stacktraces:



> Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
> at java.util.Vector.elementAt(Vector.java:470)
> at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)



Hier greift er auf deine Tabelle zu, die aber keine Daten hat (size == 0), bzw. kommt er allgemein mit einem ungültigen Index an.
Schau bzw. prüfe mal 
	
	
	
	





```
ladeData()
```
 bzw. da wo Zeilen&Spalten befüllt werden. Vielleicht ist es auch das 
	
	
	
	





```
setRowCount(x)
```
 in der 
	
	
	
	





```
init()
```
-Methode. Irgendwas in dem Kontext passt nicht.


----------

