Salve a tutti, ho un problema da risolvere. Sto implementando un progetto per un election day. Durante la votazione se la sessione supera i 5 minuti il seggio si blocca e si riavvia dopo una pausa di 2. Al suo riavvio, una volta che si può rivotare, le liste riguardanti il senato la camera e i referendum vengono stampati in maniera diversa da come dovrebbe essere visualizzata. Vorrei sapere un metodo per uccidere il thread ed effettuare da capo la votazione.
vi posto il codice riguardante la Sessione.
per altri sorgenti chiedetemeli che ve li posto.codice:/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Terminale; /** * * @author Vurp */ import java.io.IOException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; // classe che crea una sessione di voto. public class Sessione { private Terminale t = null; private int id = 0; public Sessione(int id, String idSeggio) throws IOException, RemoteException, NotBoundException { this.id = id; t = new Terminale(idSeggio); } private ExecutorService executor = Executors.newCachedThreadPool(); private boolean workCompleted = false; public boolean doWorkWithTimeout(int timeoutSecs) { System.out.println("Sessione " + id + ": attivata"); // esegue il terminale in un thread con durata massima di 5 minuti final Future<?> future = executor.submit((Runnable) t); try { future.get(timeoutSecs, TimeUnit.SECONDS); workCompleted = t.isVotoRegistrato(); } catch (Exception e) { future.cancel(true); System.out.println("Sessione " + id + ": scaduta"); } return workCompleted; } public static void main(String[] args) throws InterruptedException { int id = 0; if (args.length == 0) { System.out.println("Impossibile inizializzare il terminale per il voto, non è stato specificato l'id del seggio a cui collegarsi"); System.out.println("Es java -cp ./classes Terminale.Sessione Basilicata_1"); } while (true) { try { id++; Sessione sessione = new Sessione(id, args[0]); boolean start = false; System.out.println("Vuoi iniziare la sessione di voto: 1 si, 2 o qualsiasi altro valore per il no"); Scanner s = new Scanner(System.in); if (s.hasNextLine()) { String str = s.nextLine(); try { if (Integer.parseInt(str) == 1) { start = true; } } catch (Exception e) { } } if (start && !sessione.doWorkWithTimeout(60 * 1)) { System.out.println("La sessione sarà nuovamente attiva fra 2 minuti, attendi per favore."); for (int i = 0; i < 1 * 60; i++) { System.out.print("."); Thread.sleep(1000); } sessione.doWorkWithTimeout(60 * 1); } } catch (IOException ex) { Logger.getLogger(Sessione.class.getName()).log(Level.SEVERE, null, ex); } catch (NotBoundException ex) { Logger.getLogger(Sessione.class.getName()).log(Level.SEVERE, null, ex); } } } }

Rispondi quotando