P.d. El txt de gran tamaño puede tener unas 500.000 lineas, pongo aqui la clase que lee los datos, trabaja con ellos y muestra por ventana, como vereis es un hilo para no interferir con el hilo del swing.
Agradezco mucho toda la ayuda que me podais prestar.
Código:
class cPro extends Thread{ String lineapro; public cPro(){ } public void run(){ jBar3.setIndeterminate(true); try { while((lineapro=vproo.readLine())!=null){ //vproo lo defino dentro del boton del swing Matcher m1 = p1.matcher(lineapro); // Matcher es una variable global if(m1.find()){ if(lineapro.split("\t").length==3) { if(lineapro.split("\t")[2].length()==3 || lineapro.split("\t")[2].length()==30){ synchronized (jTextArea6){ jTextArea6.append(lineapro+"\t\n"); contproo++; jLabel15.setText("Contador: "+contproo); } } else { synchronized (jTextArea7){ jTextArea7.append(lineapro+"\n"); contproomal++; jLabel17.setText("Contador: "+contproomal); }} } if(lineapro.split("\t").length==4) { if(lineapro.split("\t")[2].length()==3 || lineapro.split("\t")[2].length()==30){ synchronized (jTextArea6){ jTextArea6.append(lineapro.replace(lineapro.split("\t")[3], "\t"+lineapro.split("\t")[3])+"\n"); contproo++; jLabel15.setText("Contador: "+contproo); } } else { synchronized (jTextArea7){ jTextArea7.append(lineapro+"\n"); contproomal++; jLabel17.setText("Contador: "+contproomal); } } } if(lineapro.split("\t").length!=3 && lineapro.split("\t").length!=4){ synchronized (jTextArea7){ jTextArea7.append(lineapro+"\n"); contproomal++; jLabel17.setText("Contador: "+contproomal); } } } else{ synchronized (jTextArea7){ jTextArea7.append(lineapro+"\n"); contproomal++; jLabel17.setText("Contador: "+contproomal); } } } } catch (IOException ex) { Logger.getLogger(cVbulletin.class.getName()).log(Level.SEVERE, null, ex); } finally { jBar3.setIndeterminate(false); Thread.currentThread().stop(); } } }