Ir ao conteúdo
  • Cadastre-se

Usando If com txt em branco/Botão pressionado


Posts recomendados

Boa tarde, primeiramente queria saber como organizar esse código:

         

  exec = Runtime.getRuntime().exec("c:\\OCR\\testei.bat"); 
            BufferedReader br = new BufferedReader(new FileReader("c:\\OCR\\out.txt"));
                String linha = br.readLine(); 
                if(!"".equals(linha)) {
                
                    robot.delay(1000);
                    robot.mouseMove(685,625);
}

 

No caso o programa ta tirando uma foto, ele roda esse bat chamando o tesseract e gera o arquivo out.txt

Porém é pra ele ficar rodando até que apareça algum texto  no arquivo out.txt, mas não ta indo!

No caso a situação seria a seguinte:

Se (linha) for diferente de vazio -> faça tal coisa...

 

E minha segunda dúvida é relacionada ao botão!

Meu programa tem um LOOP , criado com o comando While, e eu starto ele loop com o botão start.

Porém eu não consigo fazer mais nada no programa enquanto o while ta rodando.

Queria colocar um botão chamado Stop que se apertasse nele, ele parasse o programa, tem como fazer?

ex do código:

   

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
         boolean start = true;
while(start == true){
System.out.print("Olá");
}
}
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
         start= false;
}

 

Abaixo a imagem de como fica o botão até acabar o loop:

 

 

botaotravado.jpg.a7c9fce6a539c14c0b0dfbafd70bd4ae.jpg

 

Link para o comentário
Compartilhar em outros sites

Boa noite.

 

Para desvincular o processo da tela, você precisa criar uma classe específica que vai executar os loops e o código do programa.

 

Essa classe deve implementar SwingWorker<Void, Void> e os seus métodos serem disparados a partir do método doInBackground(), que é uma thread, dessa classe específica. Ao implementar SwingWorker, a ide avisa que precisa criar o método doInBackground.

 

Dessa forma, o programa "corre" livremente em background e você pode ir atualizando a tela com informações em tempo real.

 

Se precisar de exemplos mais concretos posso te passar isso amanhã.

Link para o comentário
Compartilhar em outros sites

Vamos lá...

 

Primeiro, você tem a classe que será sua tela (um JFrame). Essa classe cuida APENAS das rotinas referentes a atualizar elementos de tela, além de possuir o método main e instanciar a classe que vai efetivamente realizar as operações do seu programa.

 

public class MinhaTela extends JFrame() {
  
 public MinhaModel model;
  
  public MinhaTela() {
   //aqui, inicialize os componentes de tela e monte o layout dela
    
    //aqui você instancia a classe minhaModel passando essa classe como parâmetro
    //para que você possa atualizar os elementos de tela
    model = new MinhaModel(this); 
  }
  
  public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(() -> {
            new MinhaTela().setVisible(true);
        });
    }  
}

Depois desse ponto você precisa criar métodos para atualizar a tela, como, por exemplo, 

 

public void atualizaTela(String mensagem) {
  //escreva aqui o código para mostrar em algum elemento de tela o valor de
  //mensagem que veio por parâmetro, no caso, o valor encontrado no seu .txt
}

 

Agora, na outra classe, MinhaModel, você faz o seguinte:

 

public class MinhaModel extends SwingWorker<Void, Void> {
  
  private MinhaTela ui;
  
 public MinhaModel(MinhaTela tela) {
   this.ui = tela;
 }
  
 @Override
 protected Void doInBackground() throws Exception { 
  executaCodigoDoPrograma();   
 }
  
  private void executaCodigoDoPrograma() {
   //seu código aqui 
   //Durante a execucao do código, você quer mandar algo pra tela, aquela mensagem
   //do conteúdo do .txt. É só fazer
    ui.atualizaTela(mensagem_do_txt);
  }  
}

E, por fim, na classe MinhaTela, programe direto no clique de um botão ou em um método qualquer o que efetivamente vai fazer o programa funcionar:

 

model.execute();

Isso vai disparar a thread doInBackground() que, por sua vez, vai chamar o método executaCodigoDoPrograma que vai realizar a função que você precisa e ficar atualizando a tela em tempo real.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!