[java]Hoe start en stop ik thread vanuit GUI

Pagina: 1
Acties:
  • 70 views sinds 30-01-2008

  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
Ik zit met het probleem dat ik een Frame aan het maken ben
(dat werkt allemaal al) alleen wil ik vanuit het menu een Thread(loop lichtje) starten, ik krijg het met een losse klasse wel voor elkaar maar niet op de maar niet waarop ik zou willen
ik wil de thread namelijk aan en uit kunnen zetten via een apart frame(bij wijze van popup),
deze word gestart in het frame zelf, de thread loopt ook alleen wil ik dus de boolean kunnn benaderen waarmee ik hem zichtbaar zet of niet, deze bevind zich in de Thread zelf, nou las ik in een van mn oude lesboeken dat je niets kunt veranderen in een reeds lopende thread, is dit waar? en als dat niet waar is hoe benader ik de boolean dan wel?

De getparent() statement kan wel terugkomen naar de container maar the Thread er niet vinden, hoe los ik dit op?

wie kan mij nuttig advies geven?


edit: Meer duidelijkheid

[ Voor 38% gewijzigd door Rinusch op 07-03-2003 10:54 ]

... Life is what happens when you are busy planning other things...


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

nuttig advies:

geef een duidelijkere beschrijving van je probleem. Hier kan niemand iets mee.

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

begrijp je wat private, public en protected e.d. inhoudt?

  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
wasigh schreef op 07 maart 2003 @ 10:51:
begrijp je wat private, public en protected e.d. inhoudt?
jah, ik heb degene die ik wil benaderen op public gezet, zodat ik daar in ieder geval bij moet kunnen,

... Life is what happens when you are busy planning other things...


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

*heeft de indruk dat je de instantie van het object niet kan vinden*

Daar zijn verschillende technieken voor. Je zou het kunnen meegeven als argument, of bv een Singleton ervan maken.

En verder, public maken van velden is not done.

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Rinusch schreef op 07 maart 2003 @ 10:46:
De getparent() statement kan wel terugkomen naar de container maar the Thread er niet vinden, hoe los ik dit op?
Extend de Thread klasse niet maar doe dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
public class MyContainer extends Panel implements Runnable { // Panel of een andere container
   public Thread loopLicht;

   public MyContainer() {
       loopLicht = new Thread(this);
       loopLicht.start();
   }

   public void run() {
      // implementeer Runnable interface voor je looplicht
   }
}


Hierna kun je een instantie van MyContainer gewoon (on)zichtbaar maken. Je hoeft de thread niet te stoppen, is alleen maar lastig.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

ik neem aan dat je ergens hebt staan:
Java:
1
Thread myThread = new Thread(RunnableObj);


myThread kan je zoals hierboven gezegd meegeven als argument aan het object waar je "stopknop" opzit.. wat je ook kan doen is het object waar vanuit myThread wordt gestart een interface laten implementeren bijvoorbeeld: ThreadManager o.i.d. en in die interface definieer je een functie die heet: "StopTheLight()". Vervolgens geef je het object (this) mee aan het object waarop de stopknop zit via de constructor of via een functie die zoiets heet als: "addThreadManager(ThreadManager obj)".. vervolgens kan je via de functie in de interface de Thread 'stoppen' via deze functie.

sjow.. dat was em wel dacht ik..

ff snel uit et hoofd gedaan.. fouten voorbehouden:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public interface ThreadManager {
    public void stopThread();
}

public class ObjWaarVanuitThreadGestartWordt implements ThreadManager {
    Thread myThread = new Thread(runnableObj);
    myThread.start();
    
    public void stopThread(){
        myThread.interrupt();
    }
}


public class JouFrameMetStopKnop {
    ThreadManager myManager;
    JButton myStopKnop = new JButton("Stop");
    ...
    myStopKnop.addActionListener(
        new ActionListener(){
            public void actionPerformed(ActionEvent e){
                myManager.stopThread()
            }
        }
    );
    
    public void addThreadManager(ThreadManager myThreadManager){
        myManager = myThreadManager;
    }   
}

[ Voor 37% gewijzigd door bille op 07-03-2003 11:25 ]

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


Verwijderd

Alarmnummer schreef op 07 March 2003 @ 10:57:
*heeft de indruk dat je de instantie van het object niet kan vinden*

Daar zijn verschillende technieken voor. Je zou het kunnen meegeven als argument, of bv een Singleton ervan maken.
Hmm, ik neem aan dat je hier niet gebruik wil maken van Singleton (hoewel het in deze situatie wel het in eerste instantie beoogde resultaat opleverd). Je wilt toch niet de beperking van 1 instantie afdwingen. Je wilt alleen maar zoals je zelf al zegt een referentie...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 07 maart 2003 @ 11:20:
[...]

Hmm, ik neem aan dat je hier niet gebruik wil maken van Singleton (hoewel het in deze situatie wel het in eerste instantie beoogde resultaat opleverd). Je wilt toch niet de beperking van 1 instantie afdwingen. Je wilt alleen maar zoals je zelf al zegt een referentie...
Ik doelde met verschillend technieken ook op algemene inzet. Ik neem aan dat jij dit ook weet, maar jij wou graag ook nog even showen met je kennis. Dat mag ;)

  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

nouja.. feitelijk heeft ie wel gelijk, je gaat niet een pattern toepassen waarvoor het niet bedoelt is.. in dit geval misschien wel liever niet een singleton omdat je dan een synchronized methode krijgt en die neemt eigelijk weer een beetje meer resources in dan nodig is... (genoeg geshowed? ;))

aan de andere kant moet je als programmeur natuurlijk wel praktisch blijven.. en werkt et .. dan werkt et (niet naar performance kijkende dan).. zolang als dat je maar niet je eige code hoeft te gaan uitleggen aan een of andere mafkees.. want dan wordt et moeilijk :P

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


Verwijderd

Alarmnummer schreef op 07 maart 2003 @ 11:31:
[...]

Ik doelde met verschillend technieken ook op algemene inzet. Ik neem aan dat jij dit ook weet, maar jij wou graag ook nog even showen met je kennis. Dat mag ;)
Nou nee hoor, dat kennis showen kan ik juist niet tegen. En dat is voor mij reden nummero uno waarom ik voorheen dit forum sowieso mijdde. Ik weet ook wel dat jij de meeste design patterns wel machtig bent, maar in dit geval leek mij het Singleton pattern nou niet bepaald geschikt en een beetje een ongelukkige keuze als voorbeeld. :)

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Werkt het vanuit de GUI niet net zo als vanuit elke andere klasse?

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • mcB
  • Registratie: Mei 2002
  • Laatst online: 21-08 10:41

mcB

if (!zichtbaar_maken == stoppen){

De code die de thread uit moet voeren in een while-lus zetten en allereerst laten controleren of aan een bepaalde conditie is voldaan. Deze boolean moet je via een methodetje kunnen setten vanuit je frame.

}

Strix (Skullflame)


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

esf schreef op 07 March 2003 @ 12:47:
Werkt het vanuit de GUI niet net zo als vanuit elke andere klasse?
Jawel,

Alles in java is een klasse dus ook de GUI :)

en daarom is uit de vraagstelling al af te lezen dat de topicstarter nog weinig ervaring heeft met class referenties ed. :) ;)

Waarschijnlijk heeft hij een aparte Object voor het afhandelen van de events (misschien gegeneerd door zijn IDE) en kan hij nu niet bij het Object om dat hij de referentie niet meegeeft.

[ Voor 29% gewijzigd door wasigh op 07-03-2003 12:58 ]


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
Gaat het vanaovond als ik terugkom eens proberen :D
hopelijk werkt mn Knightriderstyle parport dan :D

... Life is what happens when you are busy planning other things...


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
bille schreef op 07 March 2003 @ 11:12:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public interface ThreadManager {
    public void stopThread();
}

public class ObjWaarVanuitThreadGestartWordt implements ThreadManager {
    Thread myThread = new Thread(runnableObj);
    myThread.start();
    
    public void stopThread(){
        myThread.interrupt();
    }
}


public class JouFrameMetStopKnop {
    ThreadManager myManager;
    JButton myStopKnop = new JButton("Stop");   ...
    myStopKnop.addActionListener(
        new ActionListener(){
            public void actionPerformed(ActionEvent e){
                myManager.stopThread()
            }
        }
    );
    
    public void addThreadManager(ThreadManager myThreadManager){
        myManager = myThreadManager;
    }   
}
Waar precies slaat dat Jbutton op? ik ken dat gebeuren helemaal niet (ben ook maar 5 maandjes onderwezen in java :()

... Life is what happens when you are busy planning other things...


  • Xenon
  • Registratie: Januari 2001
  • Laatst online: 11-08 11:42
JButton is van swing

ProtocoLAN.be: De beste LAN van de Maaskant


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
<voelt zich erg nuub>
wat precies is swing, ben het nu een paar keer tegen gekomen, maar geen idee wat het is

... Life is what happens when you are busy planning other things...


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Zoek in Google op "Java" en "Swing"; eerste hit:
The Swing toolkit is a fully-featured UI component library implemented entirely in the Java programming language. J2SE's javax.swing package uses the windowing functionality of AWT and the rendering capabilities of Java 2D to provide sophisticated and highly extensible UI components that comply with the JavaBeansTM specification.

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Swing is een soort van uitbreiding op AWT (wat je standaard gebruikt met frames). Je kan er meer mee, maar het is trager omdat het niet net als AWT gebruik maakt van de Windows / andere platform API functies maar dat hij het zelf opbouwt..

Maar het heeft dus wat meer standaard mogelijkheden.. Daarom kan je in sommige gevallen gemakkelijker Swing gebruiken..

[ Voor 21% gewijzigd door esf op 12-03-2003 22:40 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • Rinusch
  • Registratie: Mei 2002
  • Laatst online: 24-05 07:17
dus eigenlijk kun je voor het standaard werk (en verder ga ik niet) het best blijven hangen op awt :D

... Life is what happens when you are busy planning other things...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

[rml][ java]Thread stopt niet, maar waarom?[/rml]
Het had natuurlijk ook gewoon in dezelfde topic gekunt
maar aangezien deze wat ouder is zal ik deze sluiten, en niet je andere

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.