Avatar billede heltsikkert Nybegynder
27. marts 2003 - 10:34 Der er 1 kommentar og
2 løsninger

Hverken sleep() eller wait() virker!!

Jeg har to knapper i min GUI. Når man trykker på den ene knap tegner den en cirkel, venter i 5 sek. og flytter den...
Den anden knap er en simpel exit-knap, men mit problem er, at den først lukker når de 5 sek. er gået, hvis man lige inden har trykket på BtnCircle.
Jeg er bange for, at det er fordi jeg bruger sleep(). Jeg har prøvet at bruge wait() fra java.lang.Thread. Men den kaster bare en exception (java.lang.IllegalMonitorStateException).

  void BtnCircle_actionPerformed(ActionEvent e) {
    bluecircle Bc = new bluecircle();
    this.getContentPane().add(Bc);
    Bc.setBounds(100, 100, 44, 44);
    paint(getGraphics());

    try {java.lang.Thread.sleep(5000);
    } catch (InterruptedException f) {
      System.out.println("Exception " + f.toString());
    }

    Bc.setBounds(200, 200, 44, 44);
  }

  void BtnExit_actionPerformed(ActionEvent e) {
    System.exit(0);
  }

Hvis det kan være af interesse ser min bluecircle-class således ud:

class bluecircle extends JComponent {
  public void paint (Graphics g) {
    Graphics2D g2d = (Graphics2D)g;
    g2d.setColor(Color.blue);
    g2d.setStroke(new BasicStroke(3.0f));
    g2d.drawOval(2,2,41,41);
  }
}
Avatar billede disky Nybegynder
27. marts 2003 - 10:42 #1
Få din actionperformed til at starte en tråd som tegner cirklen, så venter i 5 sec og derefter flytter den, husk at kalde repaint() ind i mellem, så det bliver opdateret på skærmen.

Hvad sker der når du kører din kode ?
Avatar billede soreno Praktikant
27. marts 2003 - 10:50 #2
Du kan evt. modificere din kode til at bruge dette tråede eksempel (BtnCircle_actionPerformed skal ind i run metoden):

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

public class TextAreaTest extends JFrame implements WindowListener, Runnable, ActionListener
{
    private int frameWidth = 640;
    private int frameHeight = 480;
    private JScrollPane jsp;
    private JTextArea jta;
    private JButton jb;
    private Thread thread;

    public TextAreaTest()
    {
        createFrame();
    }

    private void createFrame()
    {
        setTitle("TextAreaTest");
        setResizable(false);
        addWindowListener(this);   

        //Place components here:
        jta = new JTextArea();
        jsp = new JScrollPane(jta);
        this.getContentPane().add(jsp, BorderLayout.CENTER);

        jb = new JButton("Hello");
        jb.addActionListener(this);
        this.getContentPane().add(jb, BorderLayout.SOUTH);
       
        //Center Frame
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(frameWidth, frameHeight));
        setLocation( (screenSize.width-this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
    }
   
    public void run()
    {
        while(true)
        {
            jta.append("Hello World" + System.getProperty("line.separator"));
            try
            {
                thread.sleep(1000);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
   
    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
        if(source == jb)
        {
            thread = new Thread(this);
            thread.start();
        }
    }

    public void windowOpened(WindowEvent e){}
    public void windowClosing(WindowEvent e){ endProgram();}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}

    public void endProgram()
    {
        dispose();
        System.exit(0);
    }
}

class Main
{
    public static void main(String args[])
    {
          new TextAreaTest().show();
    }
}
Avatar billede heltsikkert Nybegynder
28. marts 2003 - 16:16 #3
Jep, jeg har bare aldrig arbejdet med Threads før, men det ser ud til at det er det jeg skal have sat mig lidt mere ind i. Det virker i hvert fald fint nu!
Tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester