Pessoal, já passa a instância da Thread e o método start até dentro do construtor da Classe Impressora, mas não funciona.
Por favor, alguém consegue me dizer porque não executa a thread? O código não dá nenhum erro.
ESSA É A CLASSE MAIN:
import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import tadeu.fila.labs.Documentos;
public class Arquivo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Queue<Documentos> filaDoc = new LinkedList<>();
Impressora print = new Impressora(filaDoc);
Thread t = new Thread(print);
t.start();
//RESOLVER PROBLEMA DE LOOP INFINITO SE DIGITAR LETRAS AO INVES DE NÚMEROS
menu(scan, filaDoc);
}
public static void adicionarDocumento(Scanner scan, Queue filaDoc) {
System.out.println("Digite o nome do documento:");
String nomeDoc = scan.next();
System.out.println("Digite a quantidade de páginas:");
int qtdPaginas = scan.nextInt();
Documentos doc = new Documentos(nomeDoc, qtdPaginas);
synchronized(filaDoc) {
filaDoc.add(doc);
}
System.out.println("Documento adicionado com sucesso!");
}
public static void menu(Scanner scan, Queue filaDoc) {
boolean menuAtivo = true;
int opcaoMenu = 0;
while (menuAtivo) {
System.out.println("1 - Adicionar documentos" + "\n" + "2 - Visualizar fila de impressão" + "\n" + "3 - Sair do Menu" );
try {
opcaoMenu = scan.nextInt();
}
catch(InputMismatchException e) {
System.out.println("Digite apenas o número da opção desejada!");
}
menuAtivo = executarOpcao(opcaoMenu, filaDoc, scan, menuAtivo);
}
}
public static boolean executarOpcao(int opcaoMenu, Queue filaDoc, Scanner scan, boolean menuAtivo) {
synchronized(filaDoc) {
switch (opcaoMenu) {
case 1:
adicionarDocumento(scan, filaDoc);
break;
case 2:
System.out.println(filaDoc.toString());
break;
case 3:
return menuAtivo = false;
default:
break;
}
return menuAtivo = true;
}
}
}
ESSA É A CLASSE QUE CONTÉM O MÉTODO RUN.
import java.util.Queue;
public class Impressora implements Runnable{
private Queue<Documentos> doc;
public Impressora(Queue<Documentos> doc) {
this.doc = doc;
}
public void run() {
while (!doc.isEmpty()) {
impressaoDocumento();
}
}
public synchronized void impressaoDocumento() {
int tamanhoDoc = doc.peek().getQtdPaginas();
String nomeDoc = doc.peek().getNome();
System.out.println("Iniciando impressão do documento: " + nomeDoc);
for (int i = 0; i < tamanhoDoc; i++) {
System.out.println("Documento: " + nomeDoc);
System.out.println("Imprimindo página: " + i + " de " + tamanhoDoc);
}
System.out.println(doc.peek() + " foi impresso com sucesso!");
doc.poll();
}
}
ESSA É A CLASSE DO TIPO DOCUMENTO
import java.util.Queue;
public class Impressora implements Runnable{
private Queue<Documentos> doc;
public Impressora(Queue<Documentos> doc) {
this.doc = doc;
}
public void run() {
while (!doc.isEmpty()) {
impressaoDocumento();
}
}
public synchronized void impressaoDocumento() {
int tamanhoDoc = doc.peek().getQtdPaginas();
String nomeDoc = doc.peek().getNome();
System.out.println("Iniciando impressão do documento: " + nomeDoc);
for (int i = 0; i < tamanhoDoc; i++) {
System.out.println("Documento: " + nomeDoc);
System.out.println("Imprimindo página: " + i + " de " + tamanhoDoc);
}
System.out.println(doc.peek() + " foi impresso com sucesso!");
doc.poll();
}
}