Problemas com JTable e arquivo binario

Estou tendo problemas em ler um arquivo binario, armazenar os dados em um vetor, onde cada linha do arquivo seria uma posicao do vetor. Apos isso, gostaria de colocar esse vetor em um JTable, mas ocorre o seguinte erro:

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 9

Deve ser simples, mas nao estou conseguindo achar!

Codigo:

import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.IOException;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.*;
import java.io.InputStreamReader;
import java.io.BufferedReader;

import java.awt.;
import java.awt.event.
;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JTable;

import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;

class Tabela extends JPanel {
private boolean DEBUG = false;
public Tabela(Registro_Tabela reg[]) {

    super(new GridLayout(1,0));

    String[] colunas = {"Comp Ord", "Trocas Ord",
                                 "Tempo Ord", "Comp Rev", 
                                 "Trocas Rev", "Tempo Rev", 
                                 "Comp Rand", "Trocas Rand", 
                                 "Tempo Rand"};


    Object dados[][] = new Object[9][9];

    for (int i=0; i < 8; i++){
        dados[i][1] = reg[i+1].getcompOrd();
        dados[i][2] = reg[i+1].gettrocaOrd();
        dados[i][3] = reg[i+1].getttotalOrd();
        dados[i][4] = reg[i+1].getcompRev();
        dados[i][5] = reg[i+1].gettrocaRev();
        dados[i][6] = reg[i+1].getttotalRev();
        dados[i][7] = reg[i+1].getcompRan();
        dados[i][8] = reg[i+1].gettrocaRan();
        dados[i][9] = reg[i+1].getttotalRan();
    }

    final JTable tabela = new JTable(dados, colunas);
    tabela.setPreferredScrollableViewportSize(new Dimension(500, 300));

    if (DEBUG) {
        tabela.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                colocaDados(tabela);
            }
        });
    }

    //Create the scroll pane and add the table to it.
    JScrollPane barraRolagem = new JScrollPane(tabela);

    //Add the scroll pane to this panel.
    add(barraRolagem);
}
private void colocaDados(JTable tabela) {
    int numLinhas = tabela.getRowCount();
    int numColunas = tabela.getColumnCount();
    javax.swing.table.TableModel model = tabela.getModel();

    System.out.println("Value of data: ");
    for (int i=0; i < numLinhas; i++) {
        System.out.print("    row " + i + ":");
        for (int j=0; j < numColunas; j++) {
            System.out.print("  " + model.getValueAt(i, j));
        }
        System.out.println();
    }
    System.out.println("--------------------------");
}

}

class Entrada{

public static String leString(String msg){
String line="";
InputStreamReader isr= new InputStreamReader(System.in);
BufferedReader br= new BufferedReader(isr);
try{
System.out.println(msg);
line = br.readLine();
}catch(Exception e){}
return line;
}
public static int leInteger(String msg){
String line="";
InputStreamReader isr= new InputStreamReader(System.in);
BufferedReader br= new BufferedReader(isr);
try{
System.out.println(msg);
line=br.readLine();
int retorno=Integer.valueOf(line).intValue();
return retorno;
}
catch(Exception e){
return -1;
}
}
}

class Registro{
public final int tf = 1022;
private int numero, tl=tf;
private char lixo[] = new char[tf];

public Registro(){}
public Registro(int numero){
this.numero = numero;
for (int i=0; i < tf; i++)
lixo[i] = ‘X’;
}
public int getNumero(){
return(numero);
}
public void gravaNoArq(RandomAccessFile arquivo){
try{
arquivo.writeInt(numero);
for(int i= 0; i < tf; i++)
arquivo.writeChar(lixo[i]);
}catch(IOException e){}
}
public void leDoArq(RandomAccessFile arquivo){
try{
numero = arquivo.readInt();
for(int i = 0; i < tf; i++)
lixo[i] = arquivo.readChar();
}catch(IOException e){}
}
public void exibirReg(){
System.out.print(“Numero… :” + numero);
System.out.print(“Lixo… :”);
String Slixo = new String(lixo);
System.out.print(Slixo);
System.out.println();
}
static int length(){
return(2048);
}
}

class Registro_Tabela {
private int compOrd, compRev, compRan;
private int trocaOrd, trocaRev, trocaRan;
private int ttotalOrd, ttotalRev, ttotalRan;

public Registro_Tabela(){}
public int getcompOrd(){
    return compOrd;
}
public int getcompRev(){
    return compRev;
}
public int getcompRan(){
    return compRan;
}
public int gettrocaOrd(){
    return trocaOrd;
}
public int gettrocaRev(){
    return trocaRev;
}
public int gettrocaRan(){
    return trocaRan;
}
public int getttotalOrd(){
    return ttotalOrd;
}
public int getttotalRev(){
    return ttotalRev;
}
public int getttotalRan(){
    return ttotalRan;
}
public void leDoArqTabela(RandomAccessFile arquivo) {
   try{
      compOrd = arquivo.readInt();
      trocaOrd = arquivo.readInt();
      ttotalOrd = arquivo.readInt();
      compRev = arquivo.readInt();
      trocaRev = arquivo.readInt();
      ttotalRev = arquivo.readInt();
      compRan = arquivo.readInt();
      trocaRan = arquivo.readInt();
      ttotalRan = arquivo.readInt();
   }catch(IOException e){}
}
public void exibirRegTabela(){
      System.out.print("CompOrd...... :" + compOrd);
      System.out.print("TrocaOrd..... :" + trocaOrd);
      System.out.print("TempoOrd..... :" + ttotalOrd);
      System.out.print("CompRev...... :" + compRev);
      System.out.print("TrocaRev..... :" + trocaRev);
      System.out.print("TempoRev..... :" + ttotalRev);
      System.out.print("CompRan...... :" + compRan);
      System.out.print("TrocaRan..... :" + trocaRan);
      System.out.print("TempoRan..... :" + ttotalRan);
}
static int length_tabela(){
   return(36);
}

}
class Arquivo{
private String nomearquivo;
private RandomAccessFile arquivo;
private int comp, troca;

public Arquivo(String nomearquivo){
this.nomearquivo = nomearquivo;
try{
arquivo = new RandomAccessFile(this.nomearquivo,“rwd”);
}catch(IOException e){}
}

public RandomAccessFile copiaArquivo(RandomAccessFile arq){
Registro aux = new Registro();

   seekArq(arq,0);
   seekArq(0);
   while (!eof(arq)){
       aux.leDoArq(arq);
       aux.gravaNoArq(arquivo);
   }
   return arquivo;

}
public RandomAccessFile getFile(){
return arquivo;
}

public void truncate(long pos){
try{
arquivo.setLength(posRegistro.length());
} catch(IOException exc){}
}
public boolean eof(){
boolean retorno = false;
try{
if (arquivo.getFilePointer() == arquivo.length())
retorno = true;
}catch(IOException e){}
finally{
return(retorno);
}
}
public boolean eof(RandomAccessFile arq){
boolean retorno = false;
try{
if (arq.getFilePointer() == arq.length())
retorno = true;
}catch(IOException e){}
finally{
return(retorno);
}
}
public void seekArq(int pos){
try{
arquivo.seek(pos
Registro.length());
}catch(IOException e){}
}
public void seekArq(RandomAccessFile arq, int pos){
try{
arq.seek(pos*Registro.length());
}catch(IOException e){}
}
public int filesize(){
int qtde = 0;
int i = 0;
seekArq(0);
while(!this.eof())
seekArq(++i);
qtde = (2048 * i);
return (qtde/2048);
}
public void inserirReg(Registro reg){
reg.gravaNoArq(arquivo);
}
public void ExibeArq(){
int i;
Registro aux = new Registro();
try{
arquivo.seek(0);
i = 0;
while(!this.eof()){
aux.leDoArq(arquivo);
aux.exibirReg();
i++;
}
}catch(IOException e){}
}
public void ExibeArqTabela(){
int i;
Registro_Tabela aux = new Registro_Tabela();
try{
arquivo.seek(0);
i = 0;
while(!this.eof()){
aux.leDoArqTabela(arquivo);
aux.exibirRegTabela();
i++;
}
}catch(IOException e){}
}
public Registro_Tabela leTabela(){
Registro_Tabela reg = new Registro_Tabela();
reg.leDoArqTabela(arquivo);
return reg;
}

public Registro_Tabela[] leTab(){
Registro_Tabela reg[] = new Registro_Tabela[8];

   for (int i=1; i<8; i++)
     reg[i].leDoArqTabela(arquivo);
   return reg;

}

public void gravaLinhaTabela(int compOrd,int trocaOrd,
int ttotalOrd, int compRev,
int trocaRev, int ttotalRev,
int compRan, int trocaRan,
int ttotalRan){
try{
arquivo.writeInt(compOrd);
arquivo.writeInt(trocaOrd);
arquivo.writeInt(ttotalOrd);
arquivo.writeInt(compRev);
arquivo.writeInt(trocaRev);
arquivo.writeInt(ttotalRev);
arquivo.writeInt(compRan);
arquivo.writeInt(trocaRan);
arquivo.writeInt(ttotalRan);
}catch(IOException e){}
}

public void initComp(){
comp = 0;
}
public void initTroca(){
troca = 0;
}
public int getComp(){
return comp;
}
public int getTroca(){
return troca;
}

public int Busca_Direta(int tam, int elemento){
Registro aux = new Registro();
int pos = 0;

  aux.leDoArq(arquivo);
  try{
      int x = (int)(arquivo.getFilePointer() / arquivo.length());
      while((x <= tam) && (elemento > aux.getNumero()))
          aux.leDoArq(arquivo);
      pos = (int) (arquivo.getFilePointer()/2048) - 1;
  } catch(IOException e){}
  if (elemento > aux.getNumero())
      pos++;

  return pos;

}
public int Busca_Binaria(int tam, int elemento){
Registro aux = new Registro();
int ini, meio, fim, pos;
pos = 0; ini = 0;
fim = tam;
meio = (ini + fim) / 2;

   seekArq(meio);
   aux.leDoArq(arquivo);

   while ( (ini < fim) && (elemento != aux.getNumero()) ){
       if (elemento > aux.getNumero())
           ini = meio + 1;
       else
           fim = meio;
       meio = (ini + fim) / 2;
       seekArq(meio);
       aux.leDoArq(arquivo);
   }
   pos = meio;
   if (elemento > aux.getNumero())
       pos++;
   return pos;

}

public void Ord_Insercao_Direta(){
Registro aux = new Registro();
Registro valorpos = new Registro();

   for (int i = 1; i < filesize(); i++){
       int pos = i;
       seekArq(i); aux.leDoArq(arquivo);
       seekArq(pos-1); valorpos.leDoArq(arquivo);
       comp++;
       while ( (pos > 0) && (aux.getNumero() < valorpos.getNumero()) ){
           seekArq(pos); valorpos.gravaNoArq(arquivo);
           pos--;
           seekArq(pos-1); valorpos.leDoArq(arquivo);
           troca++;
       }
       seekArq(pos); aux.gravaNoArq(arquivo);
       troca++;
   }

}
public void Ord_Insercao_Binaria(){
Registro aux = new Registro();
Registro valorj = new Registro();
int pos;

  for (int i = 1; i < filesize(); i++){
      seekArq(i); aux.leDoArq(arquivo);
      comp++;
      pos = Busca_Binaria(i-1, aux.getNumero());

      for (int j = i; j >= pos+1; j--){
          seekArq(j-1); valorj.leDoArq(arquivo);
          seekArq(j); valorj.gravaNoArq(arquivo);
          troca++;
      }
      seekArq(pos); aux.gravaNoArq(arquivo);
      troca++;
  }

}
public void Ord_Selecao_Direta(){
Registro menor = new Registro();
Registro aux1 = new Registro();
Registro aux2 = new Registro();

  int i, j, posmenor;
  int tam = filesize() - 1;

  for (i = 0; i <= tam-1; i++){
     seekArq(i);   menor.leDoArq(arquivo);
     posmenor = i;
     for (j = i+1; j <= tam; j++){
        aux1.leDoArq(arquivo);
        comp++;
        if ( aux1.getNumero() < menor.getNumero() ){
           posmenor = j;
           seekArq(posmenor);
           menor.leDoArq(arquivo);
        }
     }
     troca++;
     seekArq(i);         aux1.leDoArq(arquivo);
     seekArq(posmenor);  aux2.leDoArq(arquivo);
     seekArq(i);         aux2.gravaNoArq(arquivo);
     seekArq(posmenor);  aux1.gravaNoArq(arquivo);
  }

}
public void Ord_Bolha(){
Registro esq = new Registro();
Registro dir = new Registro();

   int fim = filesize() - 1;

   while (fim > 0){
       for (int i = 0; i <= fim -1; i++){
           seekArq(i);
           esq.leDoArq(arquivo);
           dir.leDoArq(arquivo);
           comp++;
           if (esq.getNumero() > dir.getNumero()){
               seekArq(i);
               dir.gravaNoArq(arquivo);
               esq.gravaNoArq(arquivo);
               troca++;
           }
       }
       fim--;
   }

}
public void Ord_Shake(){
Registro esq = new Registro();
Registro dir = new Registro();

   int fim = filesize() - 1;
   int inicio = 0;

   while (inicio < fim){
       for (int i = 0; i < fim; i++){
           seekArq(i);
           esq.leDoArq(arquivo);
           dir.leDoArq(arquivo);
           comp++;
           if (esq.getNumero() > dir.getNumero()){
               seekArq(i);
               dir.gravaNoArq(arquivo);
               esq.gravaNoArq(arquivo);
               troca++;
           }
       }
       fim--;
       for (int i = fim; i > inicio; i--){
           seekArq(i);
           esq.leDoArq(arquivo);
           dir.leDoArq(arquivo);
           comp++;
           if (esq.getNumero() > dir.getNumero()){
               seekArq(i);
               dir.gravaNoArq(arquivo);
               esq.gravaNoArq(arquivo);
               troca++;
           }
       }
       inicio++;
   }

}
public void Ord_Heap(){
Registro valorf1 = new Registro();
Registro valorf2 = new Registro();
Registro vmaiorf = new Registro();
Registro vpai = new Registro();
Registro aux1 = new Registro();
Registro aux2 = new Registro();

   int fim = filesize() - 1;
   int pai, f1, f2, maiorF;

   while (fim > 0){
       for (pai = fim/2; pai >= 0; pai--){
           f1 = pai + pai;
           f2 = f1 + 1;
           maiorF = f1;
           seekArq(f2);
           valorf2.leDoArq(arquivo);
           seekArq(f1);
           valorf1.leDoArq(arquivo);
           comp++;
           if ((f2 <= fim) && (valorf2.getNumero() > valorf1.getNumero()))
               maiorF = f2;
           seekArq(maiorF);
           vmaiorf.leDoArq(arquivo);
           seekArq(pai);
           vpai.leDoArq(arquivo);
           comp++;
           if (vmaiorf.getNumero() > vpai.getNumero()){
               seekArq(maiorF);
               aux1.leDoArq(arquivo);
               seekArq(pai);
               aux2.leDoArq(arquivo);
               seekArq(maiorF);
               aux2.gravaNoArq(arquivo);
               seekArq(pai);
               aux1.gravaNoArq(arquivo);
               troca++;
           }
       }
       seekArq(0);
       aux1.leDoArq(arquivo);
       seekArq(fim);
       aux2.leDoArq(arquivo);
       seekArq(0);
       aux2.gravaNoArq(arquivo);
       seekArq(fim);
       aux1.gravaNoArq(arquivo);
       troca++;

       fim--;
   }

}
public void Ord_Shell(){
Registro valorj = new Registro();
Registro valorjdist = new Registro();
Registro valork = new Registro();
Registro valorkdist = new Registro();
Registro aux1 = new Registro();
Registro aux2 = new Registro();
int dist = 4;
int j, k;

   while (dist > 0){
       for (int i = 0; i <= dist; i++){
           j = i;

           while (j + dist < filesize()){
               seekArq(j);   valorj.leDoArq(arquivo);
               seekArq(j + dist);   valorjdist.leDoArq(arquivo);
               comp++;
               if (valorj.getNumero() > valorjdist.getNumero()){

                   seekArq(j);   aux1.leDoArq(arquivo);
                   seekArq(j+dist);   aux2.leDoArq(arquivo);
                   seekArq(j);   aux2.gravaNoArq(arquivo);
                   seekArq(j+dist);   aux1.gravaNoArq(arquivo);
                   troca++;

                   k = j;
                   seekArq(k);valork.leDoArq(arquivo);
                   seekArq(k - dist);   valorkdist.leDoArq(arquivo);

                   comp++;
                   while ((k - dist >= 0) && (valork.getNumero() < valorkdist.getNumero())){
                       seekArq(k);   aux1.leDoArq(arquivo);
                       seekArq(k-dist);   aux2.leDoArq(arquivo);
                       seekArq(k);   aux2.gravaNoArq(arquivo);
                       seekArq(k-dist);   aux1.gravaNoArq(arquivo);
                       troca++;

                       k = k - dist;
                       seekArq(k);   valork.leDoArq(arquivo);
                       seekArq(k - dist);   valorkdist.leDoArq(arquivo);
                       comp++;
                   }
               }
               j = j + dist;
               seekArq(j);   valorj.leDoArq(arquivo);
               seekArq(j + dist);   valorjdist.leDoArq(arquivo);
           }
       }
       dist = dist/2;
   }

}
public void Ord_Quick(int ini, int fim){
Registro valori = new Registro();
Registro valorj = new Registro();

   int i = ini;
   int j = fim;

   while ( i < j){
       seekArq(i);  valori.leDoArq(arquivo);
       seekArq(j);  valorj.leDoArq(arquivo);
       comp++;
       while ( (i < j) && (valori.getNumero() <= valorj.getNumero()) ){
           i++;
           seekArq(i); valori.leDoArq(arquivo);
           comp++;
       }
       comp++;
       while ( (i < j) && (valorj.getNumero() >= valori.getNumero()) ){
           j--;
           seekArq(j); valorj.leDoArq(arquivo);
           comp++;
       }
       seekArq(i); valorj.gravaNoArq(arquivo);
       seekArq(j); valori.gravaNoArq(arquivo);
       troca++;
   }
   if (ini < i-1)
       Ord_Quick(ini, i-1);
   if (j+1 < fim)
       Ord_Quick(j+1, fim);

}
public void Ord_QuickPivo(int ini, int fim){
Registro valori = new Registro();
Registro valorj = new Registro();
Registro valorpivo = new Registro();

   int i = ini;
   int j = fim;
   int pivo = (ini+fim)/2;

   while ( i < j){
       seekArq(i);  valori.leDoArq(arquivo);
       seekArq(j);  valorj.leDoArq(arquivo);
       seekArq(pivo); valorpivo.leDoArq(arquivo);
       comp++;
       while (valori.getNumero() < valorpivo.getNumero()){
           i++;
           seekArq(i); valori.leDoArq(arquivo);
           comp++;
       }
       comp++;
       while (valorj.getNumero() > valorpivo.getNumero()){
           j--;
           seekArq(j); valorj.leDoArq(arquivo);
           comp++;
       }

       if (i <= j){
           seekArq(i); valorj.gravaNoArq(arquivo);
           seekArq(j); valori.gravaNoArq(arquivo);
           troca++;
           i++;
           j--;

           seekArq(i);  valori.leDoArq(arquivo);
           seekArq(j);  valorj.leDoArq(arquivo);
       }

   }
   if (ini < j)
       Ord_QuickPivo(ini, j);
   if (i < fim)
       Ord_QuickPivo(i, fim);

}

public void geraArquivoOrdenado(){
for (int i= 1; i <= 10; i++)
inserirReg(new Registro(i));
}
public void geraArquivoReverso(){
for (int i= 1; i <= 10; i++)
inserirReg(new Registro(11-i));
}
public void geraArquivoRandomico(){
for (int i= 1; i <= 10; i++)
inserirReg(new Registro((int) (Math.random()*10)));
}
}

class MenuPrincipal implements ActionListener {

public JMenuBar createMenuBar() {
    JMenuBar menuBar;
    JMenu menu, submenu;
    JMenuItem menuItem;

    //Cria o menu
    menuBar = new JMenuBar();

    // primeiro menu
    menu = new JMenu("Lista");
    menuBar.add(menu);

    // submenu de Lista
    menuItem = new JMenuItem("Gerar Lista Ordenada");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Gerar Lista Reversa");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Gerar Lista Randomica");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    // submenu de Metodos
    menu.addSeparator();
    submenu = new JMenu("Métodos de Ordenação");

    menuItem = new JMenuItem("Inserção Direta Lista");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Seleção Direta Lista");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Bolha Lista");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Shake Sort Lista");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menu.add(submenu);

    // segundo menu
    menu = new JMenu("Arquivo");
    menuBar.add(menu);

    // submenu de Arquivo
    menuItem = new JMenuItem("Gerar Arquivo Ordenado");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Gerar Arquivo Reverso");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Gerar Arquivo Randomico");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem.setMnemonic(KeyEvent.VK_B);
    menuItem.addActionListener(this);
    menu.add(menuItem);

    //a submenu
    menu.addSeparator();
    submenu = new JMenu("Métodos de Ordenação");

    menuItem = new JMenuItem("Insercao Direta");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Insercao Binaria");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Selecao Direta");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Bolha");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Shake Sort");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Shell Sort");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Heap Sort");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Quick Sort");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Quick com Pivo");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menuItem = new JMenuItem("Merge Sort");
    menuItem.addActionListener(this);
    submenu.add(menuItem);

    menu.add(submenu);

    //terceiro menu
    menu = new JMenu("Tabela");
    menuBar.add(menu);

    //a group of JMenuItems
    menuItem = new JMenuItem("Mostrar Tabela Lista");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    menuItem = new JMenuItem("Mostrar Tabela Arquivo");
    menuItem.addActionListener(this);
    menu.add(menuItem);

    return menuBar;
}
public Container createContentPane() {
    JPanel contentPane = new JPanel(new BorderLayout());
    contentPane.setOpaque(true);
    return contentPane;
}
public void actionPerformed(ActionEvent e) {
    JMenuItem source = (JMenuItem)(e.getSource());
    Arquivo arqOrd, arqRev, arqRand, auxRev, auxRand;
    Arquivo arqTabela;

    arqOrd  = new Arquivo("Arq_Ord.dat");
    arqRev  = new Arquivo("Arq_Rev.dat");
    arqRand = new Arquivo("Arq_Rand.dat");
    auxRev  = new Arquivo("Cop_Arq_Rev.dat");
    auxRand = new Arquivo("Cop_Arq_Rand.dat");

    arqTabela = new Arquivo("Tabela.txt");

    long tini, tfim;
    int ttotalOrd, ttotalRev, ttotalRan;
    int compOrd, trocaOrd, compRev, trocaRev, compRan, trocaRan;

    if (source.getText() == "Gerar Arquivo Ordenado"){
        arqOrd.geraArquivoOrdenado();
    }

    if (source.getText() == "Gerar Arquivo Reverso"){
        arqRev.geraArquivoReverso();
    }

    if (source.getText() == "Gerar Arquivo Randomico"){
        arqRand.geraArquivoRandomico();
    }

    if (source.getText() == "Insercao Direta"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Insercao_Direta();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini) / 60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Insercao_Direta();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini) / 60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Insercao_Direta();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini) / 60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Insercao Binaria"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Insercao_Binaria();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini) / 60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Insercao_Binaria();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini) / 60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Insercao_Binaria();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini) / 60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Selecao Direta"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Selecao_Direta();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini) / 60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Selecao_Direta();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini) / 60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Selecao_Direta();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini) / 60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Bolha"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Bolha();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini)/60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Bolha();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini)/60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Bolha();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini)/60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Shake Sort"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Shake();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini)/60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Shake();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini)/60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Shake();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini)/60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Shell Sort"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Shell();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini)/60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Shell();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini)/60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Shell();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini)/60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Heap Sort"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Heap();
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini)/60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Heap();
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini)/60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Heap();
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini)/60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Quick Sort"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Quick(0,arqOrd.filesize()-1);
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini)/60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       auxRev.Ord_Quick(0,auxRev.filesize()-1);
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini)/60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_Quick(0,auxRand.filesize()-1);
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini)/60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Quick com Pivo"){
       // Arquivo Ordenado ...
       arqOrd.initComp();
       arqOrd.initTroca();
       tini = System.currentTimeMillis();
       arqOrd.Ord_Quick(0,arqOrd.filesize()-1);
       tfim = System.currentTimeMillis();
       ttotalOrd = (int)(tfim-tini)/60;
       compOrd = arqOrd.getComp();
       trocaOrd = arqOrd.getTroca();

       // Arquivo Reverso
       auxRev.copiaArquivo(arqRev.getFile());
       auxRev.initComp();
       auxRev.initTroca();
       tini = System.currentTimeMillis();
       arqRev.Ord_Quick(0,auxRev.filesize()-1);
       tfim = System.currentTimeMillis();
       ttotalRev = (int)(tfim-tini)/60;
       compRev = auxRev.getComp();
       trocaRev = auxRev.getTroca();

       // Arquivo Randomico
       auxRand.copiaArquivo(arqRand.getFile());
       auxRand.initComp();
       auxRand.initTroca();
       tini = System.currentTimeMillis();
       auxRand.Ord_QuickPivo(0,auxRand.filesize()-1);
       tfim = System.currentTimeMillis();
       ttotalRan = (int)(tfim-tini)/60;
       compRan = auxRand.getComp();
       trocaRan = auxRand.getTroca();

       arqTabela.gravaLinhaTabela(compOrd, trocaOrd, ttotalOrd, compRev, trocaRev, ttotalRev, compRan, trocaRan, ttotalRan);
    }

    if (source.getText() == "Merge Sort"){
        arqRand  = new Arquivo("Arq_Rand.dat");
        arqRand.geraArquivoRandomico();
    }

    if (source.getText() == "Mostrar Tabela Arquivo"){

Registro_Tabela reg[] = new Registro_Tabela[9];
// arqTabela.ExibeArqTabela();
for (int i=1; i<8; i++){
reg[i] = arqTabela.leTabela();
}

//Create and set up the window.
JFrame frame = new JFrame(“Tabela”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        Tabela newContentPane = new Tabela(reg);
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
}
private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("Metodos de Ordenação em Lista e Arquivo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    MenuPrincipal menu = new MenuPrincipal();
    frame.setJMenuBar(menu.createMenuBar());
    frame.setContentPane(menu.createContentPane());

    //Display the window.
    frame.setSize(650, 460);
    frame.setVisible(true);
}
public static void main(String args[]){
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });

}

}

E ai Parceiro!
Eu estava lendo seu código gigantesco!!! rsrsrs e encontrei isso

...
for (int i=0; i < 8; i++){ 
dados[i][1] = reg[i+1].getcompOrd(); 
dados[i][2] = reg[i+1].gettrocaOrd(); 
dados[i][3] = reg[i+1].getttotalOrd(); 
dados[i][4] = reg[i+1].getcompRev(); 
dados[i][5] = reg[i+1].gettrocaRev(); 
dados[i][6] = reg[i+1].getttotalRev(); 
dados[i][7] = reg[i+1].getcompRan(); 
dados[i][8] = reg[i+1].gettrocaRan(); 
dados[i][9] = reg[i+1].getttotalRan(); 
}
...

O que vc esta fazendo aqui é:
i=0 -> for (int i=0; i < 8; i++){
dados[0][1] = reg[1].getcompOrd();
dados[0][2] = reg[1].gettrocaOrd();
dados[0][3] = reg[1].getttotalOrd();
dados[0][4] = reg[1].getcompRev();
dados[0][5] = reg[1].gettrocaRev();
dados[0][6] = reg[1].getttotalRev();
dados[0][7] = reg[1].getcompRan();
dados[0][8] = reg[1].gettrocaRan();
dados[0][9] = reg[1].getttotalRan();
}
i=1 -> for (int i=0; i < 8; i++){
dados[1][1] = reg[2].getcompOrd();
dados[1][2] = reg[2].gettrocaOrd();
dados[1][3] = reg[2].getttotalOrd();
dados[1][4] = reg[2].getcompRev();
dados[1][5] = reg[2].gettrocaRev();
dados[1][6] = reg[2].getttotalRev();
dados[1][7] = reg[2].getcompRan();
dados[1][8] = reg[2].gettrocaRan();
dados[1][9] = reg[2].getttotalRan();
}

acredito que seja ai o seu problema, bom primeiro, vc não precisa de todas essas linhas poderia trcar simplesmente por:

for (int i=0; i < 8; i++){
  for (int j=1; j < 9; j++){
    dados[i][j] = reg[i+1].getcompOrd(); 
  }
}

daria na mesma…

esse problema de “Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 9” é que vc esta estourando o tamanho de algum array, acredito que seja nesse pedaço de código, acho que vc deveria começar preenchendo sua matriz de [0][0] ao invés de [0][1]… ou o reg[i+1]getcompOrd(); esta estourando o número de registros… vc precisa verificar isso. Em algum lugar vc esta estourando um array.