Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/04/2016, 06:18
anthony20
 
Fecha de Ingreso: octubre-2013
Mensajes: 31
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Intentando un TimeOutException

gracias por responder,

Este es el código que tengo separado para hacer las pruebas de funcionamiento:

Código:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.ExecutionException;


void setup(){

ExecutorService executor = Executors.newSingleThreadExecutor();

  Future future = null;
        try{try{try {
           future = executor.submit(new intenta_impresion2());
            System.out.println("Started..");
            System.out.println(future.get(3, TimeUnit.SECONDS));
            intenta_impresion2 AAA = new intenta_impresion2(); AAA.run();
            System.out.println("Finished!");
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Terminated!");
        }
} catch (InterruptedException ew) {println("TIMEOUT");}
} catch (ExecutionException e3w) {println("TIMEOUT");}

        executor.shutdownNow();
println("(");


}
 



public class intenta_impresion2 implements Runnable{
  
  
  public intenta_impresion2(){println("KKIHJI");
  
      try{ PrintService defServ = PrintServiceLookup.lookupDefaultPrintService();
     System.out.println("Default PrintService: "+defServ);

     PrintService[] serv = PrintServiceLookup.lookupPrintServices(null, null);
     if (serv.length==0) {
         System.out.println("no PrintService  found");
     } else {
         System.out.println("number of Services "+serv.length);
     }


     for (int i = 0; i<serv.length ;i++) {
         PrintServiceAttributeSet psa = serv[i].getAttributes();
         System.out.println("printer name "+(i+1)+" "+psa.get(PrinterName.class));
         System.out.println("accepting "+psa.get(PrinterIsAcceptingJobs.class));
     }
         }catch(Exception e){}    
     
  
  println("UKSJJHSU");
  }
    public void run() {
println("IK");  }

}

El código funciona a la perfección, el problema es que se queda pillado al ejecutar la linea:
Código:
PrintServiceAttributeSet psa = serv[i].getAttributes();
Si detecta la impresora no se bloquea, pero en caso contrario (es una impresora en red conectada a un usb del router y un programa de tp-link es el que envía los datos), hay que esperar 20-50 segundos.
´
No detecto que lance la consola una excepción de tiempo. He leido algo de que es un bug:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6181488

Pero estoy usando Windows, así que no estoy seguro de que sea eso.

El código no hace saltar la excepción de tiempo, así que no se como se puede hacer.