Sarabbe meglio che evitassi di aprire due thread uguali, se vedi che non ottieni risposta con il primo, puoi sempre includere una altro messaggio (anche vuoto) per farlo tornare in cima alla lista.
Un' altra cosa: inserici il tuo codice tra i tag [ CODE ] e [ /CODE ] (senza spazi), in tal modo codice risultera' formattato e piu' semplice da comprendere.
Detto questo ti includo la soluzione al problema. Ci sono almeno due errori gravi, in quello che hai scritto tu: devi imparare ad usare la gestione degli errori con try e catch, visto che e' un meccanismo piuttosto potente, ti consente di scrivere codice piu' elegante e piu' robusto.
codice:
import java.io.*;
import java.util.*;
public class Registro {
public static void main(String args[])throws Exception {
//Leggo dal file i dati che mi servono
File myFile = new File("./studenti.txt");
BufferedReader br = new BufferedReader(new FileReader(myFile));
//Un vettore che sarà riempito di oggetti di tipo studente
Vector v = new Vector();
Studente allievo = Studente.leggi(br);
while(allievo != null) {
//Inserisco gli oggetti nel vettore
v.addElement(allievo);
System.out.println(allievo.getNome() + " " + allievo.getMedia() + " ");
//Assegnazione che dovrebbe permettermi di uscire dal ciclo
allievo = Studente.leggi(br);
}
try {
//ricorda di chiudere i file
br.close();
} catch(IOException eIO) {
eIO.printStackTrace(System.out);
}
//Scorro il vettore e dovrei stampare
Enumeration enum = v.elements();
while(enum.hasMoreElements()) {
allievo = (Studente) enum.nextElement();
System.out.println(allievo.getNome() + " " + allievo.getMedia());
}
}
}
class Studente {
private String nome;
private int voto;
public Studente(String nome, int voto){
this.nome = nome;
this.voto = voto;
}
public static Studente leggi(BufferedReader br) throws Exception{
String tmp = br.readLine();
//Se il file arriva alla fine, esce dal metodo restituendo null
if(tmp == null) return null;
String nome = tmp;
//Stessa considerazione di prima, se non c'e' il voto dopo il nome
tmp = br.readLine();
if(tmp == null) return null;
int voto = Integer.parseInt(tmp);
//inutile creare un oggetto solo per restituirlo
return new Studente(nome, voto);
}
public int getMedia(){
return voto;
}
public String getNome(){
return nome;
}
}
In questo modo funziona, se non capisci qualche correzione, chiedi pure.