Salve a tutti,
sto frequentando un corso da programmatore e sto trovando qualche problema con l'uso dei Thread.
Sto facendo un esercizio in cui tramite un'interfaccia javaFX prendo un file *.txt e lo scrivo su una textArea della mia form. Inoltre il progresso è segnalato in una progressBar.
Sto usando i Task di javaFx per il multithread, ma continuo a ricevere eccezioni sul thread principale di javaFx.
Posto un po' di codice:
public class ControlInterfaccia {
@FXML
private TextField percorso;
@FXML
private TextArea scaricati;
@FXML
volatile private TextArea preview;
@FXML
private ProgressBar barra;
public void initialize() {
percorso.setText(System.getProperty("user.home")+"\\Desktop");
}
@FXML
private void browser(){
[omiss...
altro metodo per il bottone sfoglia]
}
@FXML
private void download() throws FileNotFoundException{
LetturaFile let=new LetturaFile(new File(percorso.getText()), preview);
Task<Void> task=new Task<Void>() {
@Override
protected Void call() throws Exception {
while(!let.fineFile()){
let.leggi();
Thread.sleep(50);
updateMessage(let.getLetti()+ " su " + let.getSize());
updateProgress(let.getLetti(), let.getSize());
}
return null;
}
};
scaricati.textProperty().bind(task.messageProperty());
barra.progressProperty().bind(task.progressProperty());
Thread t=new Thread(task);
t.setName("Download");
t.setDaemon(true);
t.start();
}
}
posto il metodo principale della classe LetturaFile, gli altri metodi fanno esattamente quel che dicono:
public void leggi() throws IOException{
byte[] buffer;
buffer=dimBuffer();
in.read(buffer, 0, buffer.length);
letti+=buffer.length;
preview.appendText(new String(buffer));
chiusuraInputStream();
}
Vi Ringrazio in anticipo per qualsiasi spiegazione, grazie.