Avatar billede bhn.314 Nybegynder
05. august 2004 - 23:09 Der er 11 kommentarer og
1 løsning

sleep() UDEN tråd

Kan man ikke få Java til at sove ligesom i php hvor man bare bruger sleep(2). Jeg har måtte lave et hack med en thread, men det virker lidt dumt ! Jeg vil bare have programmet til at spytte noget data ud med tilfældige mellemrum. Se kodestumper nedenfor:

...
    private void theEvent()
    {
        //Goes 20 times
        for(int i=1; i<21;i++)
        {
            //Print e.g. "8: false"
            printArea.append(i + ": ");
           
            Sleep p = new Sleep(2);
            printArea.repaint();
        }
    }
....
class Sleep extends Thread
{
        Sleep(int seconds)
    {
        try{
            this.start();
            this.sleep((new Random().nextInt(seconds))*1000    );
        }
        catch(Exception e)
        {
            System.out.println("Fejl");
        }       
        }
}
Avatar billede arne_v Ekspert
05. august 2004 - 23:14 #1
Bare kald:

Thread.sleep(noget);
Avatar billede arne_v Ekspert
05. august 2004 - 23:16 #2
private void theEvent()
    {
        Random rng = new Random();
        //Goes 20 times
        for(int i=1; i<21;i++)
        {
            //Print e.g. "8: false"
            printArea.append(i + ": ");
           
            Thread.sleep(rng.nextInt(2000));
            printArea.repaint();
        }
    }
Avatar billede mikkelbm Nybegynder
05. august 2004 - 23:17 #3
Det er rigtigt hvad Arne skriver, medmindre det køres i GUI. Hvis dette er tilfældet bliver du nødt til at opdatere fra en ekstern tråd.
Avatar billede bhn.314 Nybegynder
05. august 2004 - 23:23 #4
mikkelbm>> Det er lige det der er problemet. Der må da være en måde at få systemet til at sleepe UDEN en tråd, eller hvad ?
Avatar billede mikkelbm Nybegynder
05. august 2004 - 23:24 #5
For eksempel virker følgende efter hensigten:

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

public class Test extends JFrame
{
    JTextArea field = new JTextArea();
   
    public Test()
    {
        setSize(100, 50);
        this.getContentPane().add(field, BorderLayout.NORTH);
       
        theEvent();   
    }
   
    private void theEvent()
    {
        new MyThread(field).start();
  }

   
    public static void main(String[] args)
    {
        new Test().show();
    }
}

class MyThread extends Thread
{
    private JTextArea field;
   
    public MyThread(JTextArea field)
    {
        this.field = field;
    }

    public void run()
    {
        for(int i=1; i<21;i++)
        {
            field.append(i + ": ");
           
            try
            {
                Thread.sleep(200);
            }
            catch (Exception ex)
            {
            }
        }   
    }   
}

Mens nedenstående låser indtil løkken er kørt igennem:

public class Test extends JFrame
{
    JTextArea field = new JTextArea();
   
    public Test()
    {
        setSize(100, 50);
        this.getContentPane().add(field, BorderLayout.NORTH);
       
        theEvent();   
    }
   
    private void theEvent()
    {
        //Goes 20 times
        for(int i=1; i<21;i++)
        {
            //Print e.g. "8: false"
            field.append(i + ": ");
           
            try
            {
                Thread.sleep(200);
            }
            catch (Exception ex)
            {
            }
        }
    }

   
    public static void main(String[] args)
    {
        new Test().show();
    }
}


Håber jeg har forstået problemet :)
Avatar billede bhn.314 Nybegynder
05. august 2004 - 23:25 #6
mikkelbm>> Hvad mener du med ekstern tråd - hvordan laves sådan en ?
Avatar billede mikkelbm Nybegynder
05. august 2004 - 23:26 #7
Hvis du arbejder med GUI, kører GUI'en i sin egen tråd. Hvis du inde i den tråd begynder at skrive Thread.sleep(long time) låser du GUI'en og du ser ikke opdateringerne før din tråd er kørt igennem...
Avatar billede mikkelbm Nybegynder
05. august 2004 - 23:28 #8
Med ekstern tråd mener jeg en klasse for sig selv, ligesom du selv har lavet - måske ikke så godt ordvalg :)
Avatar billede bhn.314 Nybegynder
05. august 2004 - 23:28 #9
mikkelbm>> Ja, det er netop det der er problemet, jeg prøver lige - men tak for hjælpen, det var guld værd. Smid et svar og du får points
Avatar billede arne_v Ekspert
05. august 2004 - 23:29 #10
Hvis det virkede før med din kode så virker det også med en simpel Thread.sleep,
fordi din kode startede nemlig ikke en tråd, den ventede bare i constructor
til et objekt som kunne startes som tråd men ikke blev det.
Avatar billede mikkelbm Nybegynder
05. august 2004 - 23:29 #11
Glad for at kunne hjælpe...
Avatar billede arne_v Ekspert
05. august 2004 - 23:30 #12
glem den sidste kommentar - du starter jo tråden i constructor
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

IT-JOB

SOS International

Principal Solution Architect

Netcompany A/S

Senior Network Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead DevSecOps

Capgemini Danmark A/S

SAP S/4HANA Business Controlling