[java]een class in threadgroup krijgen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KillerZero86
  • Registratie: Mei 2010
  • Laatst online: 04-10 22:33
Voor een schoolopdracht probeer ik 2 kranen in een threadgroup te duwen
De kraan:
Java:
1
2
3
4
5
6
7
8
public class Kraan extends Thread {

    Schip schip;
    Kade kade;

    public void run() {
    }
}

En de main:
Java:
1
2
3
4
5
6
7
8
9
10
public class Main {

    
    public static void main(String[] args) {
       Schip schip = new Schip();
       Kade kade = new Kade();
       ThreadGroup kranen = new ThreadGroup("kranen");
       Kraan kraan1 = new Kraan(kranen, "kraan1");
       }
}


Maar dat slikt de compiler niet: er bestaat niet zo'n constructor voor kranen. Wat is de juiste methode hiervoor, een extended class van Thread in een threadgroup duwen?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:14

Janoz

Moderator Devschuur®

!litemod

Snap je waarom dit niet werkt? Die constructor staat toch ook helemaal niet in Kraan? Probeer eerst eens te bedenken wat je precies wilt gaan doen ipv 'doelloos' maar wat te proberen. Eventueel kan het handig zijn om ook eens de javadoc van ThreadGroup erbij te pakken. Tot slot neem ik aan dat je voor dit vak ook nog wel meer documentatie gekregen hebt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

KillerZero86 schreef op zaterdag 09 juli 2011 @ 17:17:
er bestaat niet zo'n constructor voor kranen. Wat is de juiste methode hiervoor
Achter je toetsenbord kruipen en die constructor maken 8)7 . Veel duidelijker kan de compile error toch niet zijn

Acties:
  • 0 Henk 'm!

  • KillerZero86
  • Registratie: Mei 2010
  • Laatst online: 04-10 22:33
JAVAdoc:

Thread(ThreadGroup group, String name)

kraan is een extended (of hoe eht ook heet) van thread. Waarom wordt deze contructor dan niet overgenomen? Het idee achter extends is toch dat alles uit de "hogere" class wordt opgepakt en meegenomen, en dat je daar zelf iets aan toe kunt voegen? Dan bestaat deze methode toch? In dat geval heb je toch ook in kranen deze methode?

En @ pissedcapslock: dus ik kruip achter mijn toetsenbord, typ vanuit een hoogstongemakkelijke positie:
public Kraan (ThreadGroup TG){

.. en dan? Er is een methode om op te vragen in welke group de thread nu staat. Verder..

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14-10 14:44

Salandur

Software Engineer

Alleen de default noargument constructor wordt overgenomen indien deze aanwezig is in de superclass.

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
KillerZero86 schreef op zaterdag 09 juli 2011 @ 18:38:
En @ pissedcapslock: dus ik kruip achter mijn toetsenbord, typ vanuit een hoogstongemakkelijke positie:
public Kraan (ThreadGroup TG){

.. en dan? Er is een methode om op te vragen in welke group de thread nu staat. Verder..
Je kunt vanuit je eigen constructor de constructor van de superclass aanroepen via "super(... argumenten ...);".

code:
1
2
3
public Kraan(ThreadGroup tg, String name) {
  super(tg, name);
}


De API voorziet waarschijnlijk ook in constructors om een thread naderhand aan een groep toe te wijzen. Dat is mogelijk een fijnere oplossing, omdat je de logica van je "Kraan" niet besmet met het groeperen van threads. Bovendien werkt dat ook met het alternatief dat je niet van Thread overerft, maar dan je Runnable implementeert en deze in een thread wrapt.

[ Voor 33% gewijzigd door Infinitive op 09-07-2011 20:08 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Kraan laten extenden van Thread is sowieso de verkeerde aanpak, een Kraan is namelijk geen Thread, je wilt hem alleen op een Thread laten draaien. Het meegeven van een ThreadGroup aan de constructor van Kraan is dan ook vreemd (wat moet een kraan in de haven met een ThreadGroup?).

Je moet van Kraan een Runnable maken en die starten op een Thread die je maakt in je main() method. Deze Thread geef je de ThreadGroup mee in de constructor.

[ Voor 14% gewijzigd door Herko_ter_Horst op 09-07-2011 21:38 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 21:11
Nog mooier zou zijn (lijkt me) om je kraan object helemaal los te halen van threads en dergelijke en er een object om heen te bouwen die het hele thread implementeert. Bijvoorbeeld een runnable class die je een kraan meegeeft in zijn constructor en dan in zijn run de methodes van de kraan aanroept daar waar nodig. Zo houd je je kraan object clean ( hij heef methodes om te 'bewegen' bijvoorbeeld maar door wie deze aangeroepen worden maakt hem niet uit. )

Maar goed dit is een beetje afdwalen. Ik zou zeggen kijk even naar je kraan object en zie wat er mis is ( de compiler geeft je het juiste antwoord). Kijk ook eventjes op internet over hoe je threadgroups moet gebruiken (of in je studieboek..) en dan moet het wel lukken.

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

Verwijderd

KillerZero86 schreef op zaterdag 09 juli 2011 @ 18:38:
En @ pissedcapslock: dus ik kruip achter mijn toetsenbord, typ vanuit een hoogstongemakkelijke positie:
public Kraan (ThreadGroup TG){
Niet als je een constructor met 2 parameters wilt gebruiken. Je zal er ook nog een String bij moeten smijten.
En dan in je implementatie de super constructor aanroepen.

En zoals hierboven reeds aangehaald:
http://download.oracle.co...ava/IandI/subclasses.html
A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members, so they are not inherited by subclasses, but the constructor of the superclass can be invoked from the subclass.

[ Voor 30% gewijzigd door Verwijderd op 10-07-2011 21:05 ]

Pagina: 1