Chamada de outra aplicação em modo modal

7 respostas
A

Pessoal, o trecho abaixo, seria utilizado para travar o programa no tempoi especificado.

Gostaria de fazer 2 perguntas...

1ª - O código está aparentemente correto ?
2ª - Criei um outro arquivo. Como faço para chamá-lo de dentro de outra aplicação ? Ele deveria ser executado ao mesmo tempo, qdo der o tempo deveria surgir uma tela bloqueando a atual. Como eu faria isso ?

Detalhe, ela deveria ser modal certo ?

import javax.swing.*;
import java.awt.*;
import java.awt.Window;

public class Tempo extends Thread{ 
    
    private Container container;
    private GridLayout grid;
    
    public Tempo() {
        
        this.start();
    }


    public static void main(String[] args) {
        Tempo tempo1 = new Tempo();
    }

   public void run() {
    
       try {

           Thread.sleep(1 * 60 * 60);
           
           JFrame teste = new JFrame();
           Button ok = new Button();
           teste.setBounds(100,150,700,500);
           teste.setTitle("Fim de Processamento");
           teste.setResizable(false);
           teste.setVisible(true);
           
           JDialog dial = new JDialog(teste,"Tempo Esgotado",true);
           dial.setBounds(150, 200, 200, 100);
           dial.getContentPane().add(ok);
           dial.setVisible(true);
       }

       catch (InterruptedException e) {
           e.printStackTrace();
       }
   }
   
   
}

7 Respostas

martui

:scrambleup: alexfb,

:arrow: Quanto ao código:

import javax.swing.*;
import java.awt.*;
import java.awt.Window;

:arrow: :idea: A linha que contém “import java.awt.Window;”, a meu ver, é desnecessária, pois você já chamou “import java.awt.*;”.

:arrow: Quanto a sua 2ª pergunta: o outro arquivo, outra aplicação que você tem…
:arrow: :idea: Você poderia usar a classe JDialog, daí você pode setá-la como modal, o que bloquearia o resto da aplicação (pelo menos para o usuário).
:arrow: :idea: Para chamá-la quando der o tempo, ponha seu código após o sleep()… Não sei bem o que você quer fazer, então, fica meio difícil…

A

OK. Deixa eu explicar melhor…

Tenho uma determinada aplicação ( PROVA ) e gostaria que à partir do momento que as perguntas forem lançadas ao usuário, uma outra aplicação fosse aberta ( iniciaria a contagem ). O aluno continuaria trabalhando sem notar o funcionamento desta outra aplicação.

Qdo o tempo terminar, abriria uma tela, ou mensagem ao aluno que o tempo terminou e a aplicação (PROVA ) seria travada.

Estou no caminho certo ou existe outra alternativa melhor.

Obrigado

martui

:scrambleup: Ok, agora te entendi melhor… Deixa eu ver o que posso fazer…

:arrow: Essa outra aplicação PRECISA ter uma janela contando o tempo da prova? Imagino que não, então, basta que ela seja uma Thread a parte, que seja iniciada assim que a primeira fosse iniciada.
:arrow: O “como fazer um contador de tempo” torna-se mais simples dessa forma… Essa Thread a parte pode, simplesmente, ser posta pra dormir no início do seu método run() (chamando o método sleep() com o tempo da prova como argumento) e logo depois do sleep() você põe um código para parar a prova… Ainda não pensei como, mas, talvez, você possa simplesmente usar uma janela modal nessa Thread a parte ou chamar setVisible(false) na janela da prova (isso vai da sua imaginação)…

“alexfb”:

Qdo o tempo terminar, abriria uma tela, ou mensagem ao aluno que o tempo terminou e a aplicação (PROVA ) seria travada.

:arrow: A última " :arrow: " aí em cima já dá uma idéia de como resolver esse problema…

Qualquer coisa… Poste aí mais alguma coisa!

A

Minha maior dúvida serioa de como fazer a chamada desta aplicação que vai travar a prova.

Tenho que iniciar a aplicação a partir de um determinado ponto da prova.

Como poderia fazer para chamá-la ?

martui

:scrambleup: Tente algo assim:

import javax.swing.JFrame;

public class TimeCounter implements Runnable {

    private JFrame aplicacaoProva;
    
    public TimeCounter(JFrame aplicacaoProva){
        this.aplicacaoProva = aplicacaoProva;
    }
    
    public void run() {
        try {
            Thread.sleep(100000); // Supondo que 100000 é o tempo da 
            					  // prova em milisegundos
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        //Após esta Thread acordar:
        aplicacaoProva.setVisible(false); // Ou qualquer coisa que feche a prova...
        
    }

}

E também, na prova, no ponto onde a Thread de controle de tempo deve começar a contar, coloque isso:

/* Use this como argumento no método abaixo 
         * se sua prova extender de 
         * JFrame. Caso isso não ocorra, ponha, no lugar
         * do this, a variável que contém a referência
         * para o JFrame da sua prova.
         */
        TimeCounter timeCounter = new TimeCounter(this);
        Thread threadTimeCounter = new Thread(timeCounter);
        threadTimeCounter.start();
        /* Pronto! Começou a contar e, assim que acabar
         * o tempo, o método chamado após o bloco Try/Catch
         * de TimeCounter será chamado.
         */

Foi isso que você perguntou? :?

A

Kra… valew

Muitos comandos eu desconhecia.

Por acaso, eu posso jogar o conteúdo deste thread ( variação ) em um JLabel (p.ex) e exibi-lo na tela para o usuário ?

Obrigado pela força

martui

:scrambleup: Pode… Basta que nela você acesse o JLabel (sei lá, com um getLabel() devolvendo ele pra você) e dê um setText(“Texto”).

Ou então, use JOptionPane.showMessageDialog() para mandar sua mensagem em modo modal…

Criado 20 de julho de 2004
Ultima resposta 23 de jul. de 2004
Respostas 7
Participantes 2