[Java] Verwijzende functies tussen klassen

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

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 28-04 08:05
Ok, ik heb het volgende probleem:

Ik heb een "MainGame" klasse, waarop een JPanel zit.
Als het spel op pauze status wordt gezet, moet de gebruiker met zijn muis op het scherm klikken om verder te gaan (gewoon simpele boolean, pauze aan/uit).
De JPanel moet een functie aanroepen uit de "MainGame" klasse om verder te gaan.
Het probleem is, dat hij daar niet bij kan komen, simpelweg:

code:
1
2
        pauseState = !pauseState;
        gameLoop();


werkt dus niet :/

met als botte error:

"
PGamePanel.java [161:1] cannot resolve symbol
symbol : method gameLoop ()
location: class package.PGamePanel
gameLoop();
^
1 error
Errors compiling PGamePanel.
"

Iemand suggesties ?

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


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

Alarmnummer

-= Tja =-

Ja.. een cursus programmeren:

zoek op thinking in Java voor een aardig boek. Jij hoort nog geen gui te programmeren.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
object.MethodName();

https://fgheysels.github.io/


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 28-04 08:05
Alarmnummer schreef op 03 augustus 2004 @ 17:13:
[...]

Ja.. een cursus programmeren:

zoek op thinking in Java voor een aardig boek. Jij hoort nog geen gui te programmeren.
Daar doen we dan maar geen uitspraak over.
Natuurlijk heb ik gedacht aan: mainGamePanel.gameLoop();
HELAAS kan hij dus niet bij gameloop() komen, omdat hij simpelweg niet bij mainGamePanel kan komen.
En voor de slimmere onder ons, JA de methode gameloop is public, en overal staan ; achter waar nodig 8)7

Even nog ter verduidelijking, mainGamePanel maar het panel object aan. Ik kan dus wel dat panel weer een mainGamePanel object laten aanmaken, maar dan heb je dus een enorm geheugen verbruik en een paar duidend objecten na het parseren van een beetje script.
Alarmnummer schreef op 03 augustus 2004 @ 17:21:
[...]

Voor de nog slimmeren moet je wel een referentie naar het object hebben. Zo slim ben jij schijnbaar dus nog niet.
Alarmnummer schreef op 03 augustus 2004 @ 17:21:
[...]

Voor de nog slimmeren moet je wel een referentie naar het object hebben. Zo slim ben jij schijnbaar dus nog niet.
Nee druif, daarom vraag ik het hier toch :P
Dat het zo niet werkt weet ik zelf ook wel. Het is juist de referentie die ontbreekt, goedemorgen, dat staat in de startpost, of is in elk geval op te merken.
De vraag is, hoe maakt ik die.
Even nog ter verduidelijking, mainGamePanel maar het panel object aan. Ik kan dus wel dat panel weer een mainGamePanel object laten aanmaken, maar dan heb je dus een enorm geheugen verbruik en een paar duidend objecten na het parseren van een beetje script.

[ Voor 53% gewijzigd door Nibble op 03-08-2004 17:26 ]

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


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

Alarmnummer

-= Tja =-

Nibble schreef op 03 augustus 2004 @ 17:20:
[...]
HELAAS kan hij dus niet bij gameloop() komen, omdat hij simpelweg niet bij mainGamePanel kan komen.
En voor de slimmere onder ons, JA de methode gameloop is public, en overal staan ; achter waar nodig 8)7
Voor de nog slimmeren moet je wel een referentie naar het object hebben. Zo slim ben jij schijnbaar dus nog niet. Zoals ik al zei.. jij moet nog niet met gui`s bezig gaan als je nog geen fuck van oo snapt.

[ Voor 10% gewijzigd door Alarmnummer op 03-08-2004 17:21 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Tja, ik denk dat je je logica teveel mixt met je UI.

https://fgheysels.github.io/


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

Alarmnummer

-= Tja =-

whoami schreef op 03 augustus 2004 @ 17:22:
Tja, ik denk dat je je logica teveel mixt met je UI.
Dat niet eens. Maar gui is al vrij gecompliceerd en als je dan ook nog niet snapt hoe object referenties ed werken.. tja.. dan valt het te vergelijken met een openhart operatie terwijl je alleen weet hoe je worst moet draaien.

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

Alarmnummer

-= Tja =-

Nibble schreef op 03 augustus 2004 @ 17:20:
[...]
Even nog ter verduidelijking, mainGamePanel maar het panel object aan. Ik kan dus wel dat panel weer een mainGamePanel object laten aanmaken, maar dan heb je dus een enorm geheugen verbruik en een paar duidend objecten na het parseren van een beetje script.
Waarom zou je dan een enorm geheugen verbruik hebben? Een object kost geheugen, dat ben ik met je eens. Maar dat hoeft niet zo veel te zijn. Verder kost een referentie naar een object bijna geen geheugen. Dus als een object toch al is gemaakt, dan kost het niet veel geheugen om een referentie naar dat object vast te houden (is maar een paar bytes).

En wat bedoel je met het parsen van een beetje script?

Ik heb heel erg de indruk dat je geen flauw benul hebt wat je aan het doen bent. Je moet zorgen dat je de oo basics onder de knie hebt (dus weten wat een referentie naar een object is). En daarna kan je met gui aan de slag gaan.
Nee druif, daarom vraag ik het hier toch :P
Ik heb je misschien een antwoord gegeven die jou niet bevalt, maar het is wel de beste manier om jou een betere programmeur te maken en jou te laten inzien wat je aan het doen bent. Programmeren is geen trial en error, of 'if it compiles, ship it'. Je moet weten wat je doet.

Verwijderd

Als ik je een beetje begrijp (want man, ik snap er eigenlijk niet veel van) wil je het spelobject een referentie van het instantierende object meegeven (het panel waar het spelobject in draait).
Stel een InstantierendObject instantieert het SpelObject, dan kun je een referentie in bijv de constructor meegeven.
Dus in InstantierendObject:
[code=java]SpelObject spel = new SpelObject(this);[code]
En dan in SpelObject:
[code=java]
class SpelObject {
InstantierendObject parent; // Het object dat het spelobject instantieerd
...
public SpelObject (InstantierendObject parent) {
this.parent = parent;
.....
}
[code]
Nu kun je dus verderop in je SpelObject met parent.gameLoop() de methode aanroepen in het InstantierendObject. Verder neem ik aan dat je met threads werkt die de GUI updaten. En neem ik aan dat je daar de pauze wil toepassen.
Misschien kun je iets duidelijker zijn? Bijvoorbeeld door iets meer code te plaatsen.

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 28-04 08:05
Verwijderd schreef op 03 augustus 2004 @ 17:52:
Als ik je een beetje begrijp (want man, ik snap er eigenlijk niet veel van) wil je het spelobject een referentie van het instantierende object meegeven (het panel waar het spelobject in draait).
Stel een InstantierendObject instantieert het SpelObject, dan kun je een referentie in bijv de constructor meegeven.
Dus in InstantierendObject:
[code=java]SpelObject spel = new SpelObject(this);[code]
En dan in SpelObject:
[code=java]
class SpelObject {
InstantierendObject parent; // Het object dat het spelobject instantieerd
...
public SpelObject (InstantierendObject parent) {
this.parent = parent;
.....
}
[code]
Nu kun je dus verderop in je SpelObject met parent.gameLoop() de methode aanroepen in het InstantierendObject. Verder neem ik aan dat je met threads werkt die de GUI updaten. En neem ik aan dat je daar de pauze wil toepassen.
Misschien kun je iets duidelijker zijn? Bijvoorbeeld door iets meer code te plaatsen.
Misschien kwam het er wat knullig uit, maar dit is dus inderdaad mijn exacte probleem geweest. Mijn hartelijk dank voor de uitleg, nu werkt het wel.
Kijk, ik ben echt niet nieuw met java, maar sommige dingen kom je niet al te vaak tegen. Ervaring heet zoiets. Dit stond trouwens ook niet uitgelegd in de 2 boeken die hier langs mij liggen. En op java.sun.com heb ik het in elk geval niet zo kunnen vinden. Maar je moet dan ook maar net weten waar je op moet zoeken.
Waarschijnlijk was mijn probleemomschrijving daarom ook wat vaag.
Toch vind ik dat mensen hier (niet ik alleen), met regelmaat onnodig een stfu, rtfm reactie krijgen. Nou kan ik mijn geduld redelijk houden, maar wat voor de een dagelijkse kost is, kan de ander misschien nog nooit gezien hebben.
Ervaring en leren heet zoiets. Nogmaals bedankt voor je reactie. :)

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


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

Alarmnummer

-= Tja =-

Nibble schreef op 03 augustus 2004 @ 18:07:.
Kijk, ik ben echt niet nieuw met java, maar sommige dingen kom je niet al te vaak tegen. Ervaring heet zoiets.
Nee.. dit is zo elementair dat je dit niet onder normale developers ervaring kan schuiven. Dit is gewoon volledig basic.
Toch vind ik dat mensen hier (niet ik alleen), met regelmaat onnodig een stfu, rtfm reactie krijgen. Nou kan ik mijn geduld redelijk houden, maar wat voor de een dagelijkse kost is, kan de ander misschien nog nooit gezien hebben.
"Geef mensen niet wat ze willen, maar wat ze nodig zijn"

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

En dicht.

Probleem is opgelost en zoals men nu discussieert, kan je een een pooltje leggen of de eerste trolls / flames binnen 10 posts komen of niet. :/

Oftewel: probleem opgelost, sfeer niet best, topic dicht :)

[ Voor 4% gewijzigd door gorgi_19 op 03-08-2004 18:22 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.