Archief - [PROG][JAVA] Bij .dispose() blijft de exe in het geheugen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

yannick

Legacy Member
Goedeavond ;),

Het zit dus simpel in elkaar. Ik heb een splashscreen gemaakt dat na 3 sec automatisch gedisposed wordt en er een andere frame in de plaats voor komt.

Mijn splashscreen en hoofdscreen zijn alletwee aparte classes. Nu leek het mij simpel om na 2 seconden gewoon this.dispose te doen, maar nu blijkt dat deze dan NIET afsuilt (blijft in geheugen staan).

Ook krijg ik geen build successful als ik dispose gebruik.


Wat moet ik doen om mijn splash screen goed af te sluiten?

mvg

Emerxill

Legacy Member
Wachten tot uw vm vindt dat hij de garbage collector moet oproepen, zodat het geheugen effectief terug naar het OS kan gaan :)
In java wordt het geheugen door de vm beheerd.

Ik denk dat dispose dus goed is.
Die "build" (weet wel niet wat je daar exact mee bedoeld) gaat terug gebeuren als ge die splash opnieuw gaat oproepen vermoed ik...
(ken AWT/Swing eigenlijk niemeer zo goed, heb mij vooral gebaseerd op de API).

Welke exe bedoelt ge eigenlijk? Die van uw VM?

yannick

Legacy Member
Emerxill zei:
Wachten tot uw vm vindt dat hij de garbage collector moet oproepen, zodat het geheugen effectief terug naar het OS kan gaan :)
In java wordt het geheugen door de vm beheerd.

Ik denk dat dispose dus goed is.
Die "build" (weet wel niet wat je daar exact mee bedoeld) gaat terug gebeuren als ge die splash opnieuw gaat oproepen vermoed ik...
(ken AWT/Swing eigenlijk niemeer zo goed, heb mij vooral gebaseerd op de API).

Welke exe bedoelt ge eigenlijk? Die van uw VM?

Met die exe bedoel ik de java.exe. Ik vind het raar dat je moet wachten op de garbage disposer, want als je een form afsluit met het kruisje, gaat hij wel direct uit het geheugen, dit zou toch ook mogelijk moeten zijn als je zelf een form (mijn splash is dus een form waar undecorated aangevinkt staat, dus heeft geen kruisje :p) wilt sluiten :).

Ik heb ook gemerkt, als ik 2 keer mijn splash laat liet en laat afsluiten met dispose dat er 2 java.exe's in het geheugen blijven :).

Bedankt voor de hulp al :)
grtz

Emerxill

Legacy Member
java.exe is uw VM.

Als ge daarvoor uw form sluit, sluit ge dan uw applicatie dan af? Maw is dat het laatste schermke?
Zo ja, dan ist normaal dat de vm mee afsluit, die heeft niks meer te doen.

Als ge na uw splash nog een form oproept dan moet uwe vm blijven bestaan, en zal hij niet afsluiten. Dat maakt niet uit als dat 2 aparte klassen zijn, als die uit dezelfde main() opgeroepen worden wordt daar een VM aan "toegewezen".

Analoog voor die 2e splash die gij opstart, da's ne nieuwe main(), dus ne nieuwe vm (java.exe).

Helpt dit?

yannick

Legacy Member
Voorlopig is da de enigste form die openstaat (voor te testen heb ik de lijn die de andere form oproept in comment gezet).

Kunde geen event oproepen da hetzelfde doe dan op het kruisje duwen (moet toch te doen zijn :p)

grtz

Emerxill

Legacy Member
Ja dat gaat, maar zoals ik zeg, uw java.exe gaat pas afsluiten als uw main-thread dood is :)
De rest van uw memory management wordt door de vm gedaan. Daar kunt ge niks rechtstreeks aan doen. Buiten beleefd vragen, en dan gaat de vm nog beslissen of hij daar nog op in gaat of niet.

Als ge het event wil oproepen van de kruiske, ma dan gaat ge volgens mij windowClosing(WindowEvent e) moeten overschrijven ergens. (denk ik)
Maar waar ge dat precies doet weet ik ook niet :)

yannick

Legacy Member
Kheb gelezen da er een SplashScreen functie is in java (hier).

Ik ben nog wel aant uitzoeken hoe ik dat juist doe, want snap er nog ni veel van :).

grtz

MilM

Legacy Member
Emerxill zei:
Als ge het event wil oproepen van de kruiske, ma dan gaat ge volgens mij windowClosing(WindowEvent e) moeten overschrijven ergens. (denk ik)
Maar waar ge dat precies doet weet ik ook niet :)

Die code wordt uitgevoerd bij een windowClosing, terwijl hij een commando zoekt om het venster te sluiten. :) (en dus niet om het op te vangen)

yannick

Legacy Member
MilM zei:
Die code wordt uitgevoerd bij een windowClosing, terwijl hij een commando zoekt om het venster te sluiten. :) (en dus niet om het op te vangen)

Idd :).

Pff tis allemaal ni simpel zenne. Als iemand mss is kan uitleggen hoe ik die splashscreen functie kan laten werken zou da heeeel tof zijn :).

Kzal er zelf ook nog is mijn hoofd over breken.

grtz

Ollie

Legacy Member
yannick zei:
Mijn splashscreen en hoofdscreen zijn alletwee aparte classes. Nu leek het mij simpel om na 2 seconden gewoon this.dispose te doen, maar nu blijkt dat deze dan NIET afsuilt (blijft in geheugen staan).

Logisch, door een frame te disposen sluit je de applicatie niet af. Dit is ook de standaard behavior bij het klikken op het kruisje rechtsboven. Om in dat geval de applicatie ook af te sluiten was JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) nodig.

yannick zei:
Ook krijg ik geen build successful als ik dispose gebruik.

Is het aan ons om te raden waarom?

yannick zei:
Wat moet ik doen om mijn splash screen goed af te sluiten?

Uw splashscreen was goed afgesloten (niet meer zichtbaar).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan