Avatar billede hulla Novice
27. maj 2001 - 22:55 Der er 17 kommentarer og
1 løsning

afbryd tråd fra BGF

Mit problem er dette:
Jeg har startet en tråd fra en brugergrænseflade lavet i swing.
Tråden kører fint og gør de ting den skal, men jeg kan imens den kører ikke foretage mig andet på BGF.
Det jeg skal er at stoppe tråden ved at trykke på en anden knap. Jeg har prøvet det samme med en løkke, der ikke kører i en tråd med det samme resultat.

Er der nogen der kan komme med et godt råd ?
Avatar billede stigc Nybegynder
27. maj 2001 - 23:11 #1
Du skal lade tråden sove engang i mellem.

prøv:

try { Thread.sleep(100); }
catch (InterruptedException e) { }   

Avatar billede hulla Novice
27. maj 2001 - 23:15 #2
det har jeg prøvet, det gør den hele tiden i forløbet, men det virker ikke !!
Avatar billede stigc Nybegynder
27. maj 2001 - 23:17 #3
du stopper et tråd sådan her:

    myThread.stop();
      myThread = null;
Avatar billede mpultz Nybegynder
27. maj 2001 - 23:19 #4
Er du sikker på at dit \"tråd kode\" bliver eksekveret i en seperat tråd og ikke i hovedtråden. Hvis GUI\'et ikke reagerer på input så bliver det højst sandsynligt eksekveret i hovedtråden. Nå, men hvis du har en seperat tråd så prøv at sætte prioriteten ned på tråden inden du starter den, e.g. setPriority(). Det vil få dit GUI til at reagere med det samme når du trykker på din knap. Du kan stoppe tråden således. I din knaps Action listener tilføj myThread.interrupt().
Avatar billede hulla Novice
27. maj 2001 - 23:32 #5
min knaps actionlistener ligger i en anden klasse end min tråd kører i. Hvordan tilføjer jeg den?
Avatar billede hulla Novice
27. maj 2001 - 23:38 #6
forøvrigt så er min tråd åbenbart bedøvende ligeglad med prioriteter  !!
Avatar billede mpultz Nybegynder
27. maj 2001 - 23:42 #7
F.eks. Opret først din tråd, vent med at starte den, opret din klasse med din action listener og giv en reference til din tråd med. Start din tråd.
Avatar billede mpultz Nybegynder
27. maj 2001 - 23:53 #8
Kan du poste noget kode, hvordan laver/starter du din tråd? Hvilket OS benytter du?
Avatar billede hulla Novice
28. maj 2001 - 00:04 #9
Her oprettes tråden. Jeg benytter windows me.


Thread startauktion = new Thread();

boolean stop = false;
public void run(boolean stoptraad, int faldetilrotid)
{
stop = stoptraad;
startauktion.setPriority(Thread.NORM_PRIORITY-2);
startauktion.start();
int Stoptid = 0;

try
{
  while (stop&&Stoptid<faldetilrotid)
  {
    System.out.println(\"jaja\");
    startauktion.sleep(1000);
    Stoptid++;
  }
 
}
catch(InterruptedException ex)
{
}
Avatar billede mpultz Nybegynder
28. maj 2001 - 00:13 #10
Er det bare mig eller mener du ikke:

boolean stoptraad;
int faldetilrotid;
..
Thread startauktion = new Thread(new Runnable() {
  public void run()
  {
    boolean stop = stoptraad;
    int Stoptid = 0;
    try
    {
      while (stop&&Stoptid<faldetilrotid)
      {
        System.out.println(\"jaja\");
        sleep(1000);
        Stoptid++;
      }
    }
    catch(InterruptedException ex)
    {
    }
  }
});
startauktion.setPriority(Thread.NORM_PRIORITY-2);
startauktion.start();

Det kode du har starter rigtig nok tråden startauktion, men den terminerer med det samme. Din run() metode bliver aldrig kaldt.
Avatar billede hulla Novice
28. maj 2001 - 00:15 #11
min run metode kaldes fra min GUI klasse ved påvirkning fra brugergrænsefladen!!

Ændrer det noget ??
Avatar billede mpultz Nybegynder
28. maj 2001 - 00:19 #12
JA, fordi det betyder at din while løkke bliver eksekveret i hovedtråden, derfor ingen respons fra GUI.
Avatar billede hulla Novice
28. maj 2001 - 00:22 #13
hvordan ændrer jeg det ? Jeg kan ikke flytte run() over i GUI klassen, men den skal kaldes herfra !
Avatar billede mpultz Nybegynder
28. maj 2001 - 00:26 #14
Du skal aldrig selv kalde run() metoden. Med udgangspunkt i min modificeret udgave.

// Her oprettes tråden
Thread startauktion = new Thread(...

Konstruktøren tager et objekt der implementerer Runnable interfacet, dvs. objektet impl. run() metoden. I run() metoden skal din \"tråd kode\" være.

startauktion.setPriority(Thread.NORM_PRIORITY-2);
startauktion.start();

Prioriteten sættes og tråden startes (som medfører at metoden kaldes automatisk).
Avatar billede mpultz Nybegynder
28. maj 2001 - 00:27 #15
Og det skulle selvfølgelig være \"Prioriteten sættes og tråden startes (som medfører at metoden run() kaldes automatisk).\"
Avatar billede mpultz Nybegynder
28. maj 2001 - 00:31 #16
Se iøvrigt http://java.sun.com/docs/books/tutorial/essential/threads/ for at få mere info om brugen af tråde.
Avatar billede hulla Novice
28. maj 2001 - 00:32 #17
er det i konstruktøren i GUI klassen at objektet indeholdende run() metoden skal implementeres?
Avatar billede mpultz Nybegynder
28. maj 2001 - 08:41 #18
Nu kender jeg ikke til alt din kode, men mit råd til dig er at læse ovenstående links. Der er noget helt gal med den måde du bruger Thread klassen på. Dennes konstruktør skal have et objekt af typen Runnable med. Og dette objekt skal altså impl. run metoden.
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