Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    (java) Come si usa il metodo wait

    Ho un JTextPane inserito in un JFrame
    Il JFrame è dotato di un menu
    Quando permo su un pulsante del menu vorrei che il sistema rispondesse con qualche istante di ritardo, quindi nella action dei pulsanti ho messo la seguente istruzione:

    try {
    editor.wait(100);
    } catch (InterruptedException ie) {
    System.out.println(ie.toString());
    }

    Purtroppo viene generata la seguente eccezione quando premo su un pulsante (che riguarda proprio la riga editor.wait)
    Qualcuno sa aiutarmi a risolvere questa eccezione o mi sa suggerire un metodo alternativo alla wait?

    java.lang.IllegalMonitorStateException: current thread not owner
    at java.lang.Object.wait(Native Method)
    at classes.main.Editor$NewAction.actionPerformed(Edit or.java:878)
    at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
    at javax.swing.AbstractButton$ForwardActionEvents.act ionPerformed(Unknow
    n Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Sour
    ce)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    metti Thread.sleep(1000);

    il programma si addormenterà per un secondo

    o se vuoi addormentare solo l'editor puoi usare

    editor.sleep() ma non ne sono sicuro, conosco poko questi metodi

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    editor.sleep non esiste

    ho usato
    Thread.sleep(1000);

    c'è un problema
    Io voglio fare questa sequenza di istruzioni all'interno della action di un pulsante

    metodo1
    sleep
    metodo2

    però avendo messo lo sleep dentro l'azione di un pulsante java fa questo:

    quando premo il pulsante l'effetto è questo:

    esegue il metodo sleep
    poi il metodo 1
    poi il metodo 2

    Come faccio ad eseguire questa sequenza?:

    metodo1
    sleep
    metodo2

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    help

  5. #5
    Ciao abcd1000

    wait() é un metodo che va associato a notify() e per implementarli occorre una gestione particolare.

    siccome ogni applicazione di per se é un thread, potresti o estendere la classe Thread , ma credo che tu abbia già esteso JFrame , oppure implementare l'interfaccia Runnable.

    Guarda ti faccio un regalino
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Ritardo extends JFrame implements ActionListener, Runnable{

    JTextField fl1 = new JTextField();
    JTextArea ar1 = new JTextArea();
    JButton bt1 = new JButton("ESEGUI");
    Thread t;
    public Ritardo(){
    super("FRAME GENERICO");
    fl1.setSize(80,20); fl1.setLocation(10,10);
    ar1.setSize(400,200); ar1.setLocation(120,20);
    bt1.setSize(80,20); bt1.setLocation(10,50);
    JPanel pn = new JPanel();
    pn.add(fl1); pn.add(ar1); pn.add(bt1);
    setContentPane(pn);
    bt1.addActionListener(this);
    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e) { System.exit(0); }
    });
    Container c = getContentPane();
    c.setLayout(null);
    setSize(600,400);
    show();

    }

    public void run() // ridefinisco run di Runnable
    {
    try{
    ar1.append("ciao" + "\n");
    t.sleep(2000);
    ar1.append("abcd1000");
    }
    catch(InterruptedException i)
    {
    i.getMessage();
    }

    }

    //-------------------GESTIONE EVENTO BOTTONE -----------------------------
    public void actionPerformed(ActionEvent e)
    {
    Object o = e.getSource();
    if (o == bt1){
    avviaThread();
    }
    }


    public void avviaThread()
    {
    t = new Thread(this);
    t.start(); // questo richiama il metodo run()
    }

    public static void main (String arg []){
    Ritardo f = new Ritardo();
    }
    }// fine frame

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    grazie delle righe di codice però per implementare una pausa di 1 secondo dentro l'action di un pulsante mi sembra una soluzione un pò troppo corposa

    non ci sarà un altro soluzione?

  7. #7
    In java i thread si gestiscono o con la classe Thread o con l'interfaccia Runnable.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    ma non posso semplicemente scrivere

    Threa.sleep(1000);


    senza bisogno di implementare l'interfaccia Runnable visto che il mio applicativo è già un Thread?

  9. #9
    Se vuoi far addormentare il thread o qualsiasi classe per un secondo si
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    IL PROBLEMA è che sono dentro l'action di un bottone

    se scrivo

    azione1
    Thread.sleep
    azione2


    la jvm mi esegue

    Threa,sleep
    azione1
    azione2

    come faccio a dirgli di eseguire le istruzioni nell'ordine con cui sono scritte?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.