Jogando erro para um jTextField

Bom dia

No aplicativo que estou desenvolvendo existe um erro que preciso tratá-lo e não sei como fazer.
Acontece que é feito uma leitura em um arquivo de texto e na ultima linha existe um caracter especial que quando é lido gerá um erro assim:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 4

preciso alertar o usuario que quando acontecer esse erro ele deve remover o caracter do arquivo emitindo uma msg de erro ou do tipo pop-up ou num jTextField mesmo que está como somente leitura e sem borda ficando imperceptivel quando tudo funcionar corretamente

segue a classe:

package unibancoleiturainclusao;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author erasmo.carvalho
 */
public class BaixaPreHeader {
    private static String filler1;
    private static String tipoDeRegistro;
    private static String dataDoProcessamento;
    private static String identificacaoReg;
    private static String dsName;
    private static String sequencia;
    private static String codEscobGescob;
    private static String nuCnpj;
    private static String filler2;
    private static String sql;
    private static String sqlPreHeader = null;
    
    public static void BaixaPreHeader(String arquivo) throws ClassNotFoundException, SQLException, FileNotFoundException{
        BufferedReader leia = null;
        Class.forName("org.gjt.mm.mysql.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://192.168.1.56/uni","root","root");

        //leia = new BufferedReader(new FileReader("C:\Java\Uni\Proc_AGE_BAI2309.TXT"));
        leia = new BufferedReader(new FileReader(arquivo));
        String line;
        
        try {
            sql = "delete from baixa_pre_header";
            Statement smtp = con.prepareStatement(sql);
            smtp.execute(sql);
            
            while ((line = leia.readLine()) != null) {
                filler1 = line.substring(0, 4);
                tipoDeRegistro = line.substring(4, 6);
                dataDoProcessamento = line.substring(6, 14);
                identificacaoReg = line.substring(14, 22);
                dsName = line.substring(22, 72);
                sequencia = line.substring(72, 81);
                codEscobGescob = line.substring(81, 89);
                nuCnpj = line.substring(89, 104);
                filler2 = line.substring(104,400);
                //System.out.println(filler1 + ";" + tipoDeRegistro + ";" + dataDoProcessamento + ";" + identificacaoReg + ";" + dsName + ";" + sequencia + ";" + codEscobGescob + ";" + nuCnpj);

                if (tipoDeRegistro.equals("00")) {

                    sqlPreHeader = "insert into baixa_pre_header (filler1,tipoDeRegistro,dataDoProcessamento,identificacaoReg,dsName,sequencia,codEscobGescob,nuCnpj,filler2) values ('" + filler1 + "','" + tipoDeRegistro + "','" + dataDoProcessamento + "','" + identificacaoReg + "','" + dsName + "','" + sequencia + "','" + codEscobGescob + "','" + nuCnpj + "','" + filler2 + "')";
                    //System.out.println(sqlPreHeader);
                    Statement smtp1 = con.prepareStatement(sqlPreHeader);
                    smtp1.execute(sqlPreHeader);
                }
            }
            leia.close();
            con.close();


        } catch (IOException err) {
            //err.printStackTrace();
            err.getMessage();
        }
    }
}    

Alguem pode me ajudar?

Acho que é melhor desprezar as linhas em branco que porventura possam aparecer nesse arquivo. É mais fácil que você pedir ao usuário remover a última linha em branco do programa, e menos agressivo.

Use o JOptionPane.showErrorMessage…

De uma pesquisada sobre ele…

mas no arquivo não existe linhas em branco o que acontece é que ele vem com um caracter invalido para a leitura tipo e preciso abortar a leitura ou gerar um erro informando que a leitura e gravação falhou.

Aparentemente esse seu erro é causado por vc estar tentando pegar uma posição inexistente no seu BufferedReader leia, de uma verificada se o index realmente existe!

Abraço!

Então

não existe a posição por isso dá esse erro, no final do arquivo e na ultima linha existe um caractere = a este quadrado, por isso ele dá o erro, já recebemos o arquivo com isso e preciso alertar o usuario para retirar esse caracter ou tratar de uma maneira melhor.

Se a linha recebida tiver comprimento <= 1, deve ser esse lixo, e você não precisa processar a tal linha. OK?

Não tinha pensado por esse lado, mas sim

No caso eu tenho 8 tipos de leituras diferentes para o mesmo arquivo, então não seria , melhor informar o usuario que o arquivo está com um formato fora do padrão do que fazer uma condição de parada para cada leitura se o tamanho da linha for menor ou igual a 1?