Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

[java] loading schermpje

Ik zou graag een klein popup schermpje maken met de tekst "Converting..." , daarvoor heb ik dus zelf mijn eigen JDialog gemaakt, die werkt perfect zoals het moet. Deze staat echter modaal wat er voor zorgt dat hij de huidige thread blokkeert tot het scherm terug gesloten wordt. Dit levert natuurlijk op dat ik niet echt kan gaan converteren nadat het scherm is geopend. Een stukje pseudocode:

Code: Selecteer alles

WaitDialog dialog = new WaitDialog(this,"Please wait", "Converting ...");

dialog.open();

//hier het werk doen

dialog.dispose();
Het antwoord is zeker dat ergens aparte threads moet gaan gebruiken, maar ik heb nu zowat alles in een aparte thread proberen steken, maar zeker op de foute manier, want het werkt nog steeds niet.

Iemand? ;)
meijuh
Artikelen: 0
Berichten: 202
Lid geworden op: ma 20 nov 2006, 21:11

Re: [java] loading schermpje

euh een wilde gok:

Als je die JDialog van jou, Runnable laat implementeren en als je dan een nieuwe JDialog wil aanmaken doe je het volgende:

new Thread(new JDialog()).start();

En dan zorg je dat je in de JDialog.run() methode this.open() doet
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] loading schermpje

Op die manier kan ik die dialog natuurlijk nooit meer gesloten krijgen toch?
meijuh
Artikelen: 0
Berichten: 202
Lid geworden op: ma 20 nov 2006, 21:11

Re: [java] loading schermpje

Hmm,

Ik denk dat je dan het volgende moet doen:

WaitDialog dialog = new WaitDialog(this,"Please wait", "Converting ...");

new Thread(dialog).start();

En dan kun je later gewoon dialog.dispose() doen.

WaitDialog moet dus nog wel Runnable implementeren en de methode run moet dialog.open() implementeren.
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] loading schermpje

Ok dat doet het bijna. Het probleem is nu dat de inhoud van het kadertje niet meer getekend wordt (de rand staat er, maar binnenin is het gewoon volledig transparant). Enig idee? ;)
meijuh
Artikelen: 0
Berichten: 202
Lid geworden op: ma 20 nov 2006, 21:11

Re: [java] loading schermpje

Misschien dat je JDialog.repaint() even moet aanroepen?

Of als dat niet werk even kijken naar http://java.sun.com/j2se/1.4.2/docs/api/ja...a.awt.Graphics)

Als dat ook niet werkt ligt het misschien aan het feit dat je nu informatie uit de verkeerde klasse in de kader wil zetten. Maar hiervoor kom ik een beetje informatie tekort, als je wil mag je je source wel even toevoegen als bijlage ofzo.
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] loading schermpje

Ik heb het wat verder onderzocht, het is blijkbaar het werk tussen de opening en het sluiten die er voor zorgt dat de kader niet getekend wordt. Als ik de dispose() eventjes weglaat dan wordt de inhoud van het paneel wel getekend als het werk is afgerond. Dat dialoogscherm toont gewoon 1 regeltje tekst en haalt nergens data.

Het probleem is dat ik dat stukje code tussen start() en dispose() niet echt in een aparte thread kan steken dus dat is ook geen oplossing.

Code: Selecteer alles


File f = fc.getSelectedFile();

KARloader loader = new KARloader();

loader.loadFile(f);

WaitDialog dialog = new WaitDialog(this,"Please wait", "Converting ...");

loader.convert();

(new Thread(dialog)).start();

while (loader.isConverting()) {

}

setLyrics(loader.getLyrics());

library.save();

dialog.dispose();
Edit: Deze code wordt uitgevoerd in actionPerformed() en blijkbaar blokkeert code in listenersmethodes de event dispatch thread waardoor het scherm niet getekend wordt. Ik zal er dus wat anders op moeten vinden ;)
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] loading schermpje

Ik kan niet meer editen, maar ik wil toch even melden dat het gelukt is door ook het werk in een aparte thread te zetten ;)
meijuh
Artikelen: 0
Berichten: 202
Lid geworden op: ma 20 nov 2006, 21:11

Re: [java] loading schermpje

Leuk he java:)

Maar ik zie een "vies" stukje code. In jou klasse waar actionPerformed() instaat, staat dus: loader.isConverting(). Waarom laat je KARLoader niet Observable implementeren en de klasse waar actionPerformed instaat niet Observer extenden?

Zo kan KARLoader zelf zeggen wanneer hij klaar is met converteren en hoef je dit dus niet met een "vies" while lusje te doen. Ik denk dat als je het Observer pattern gaat gebruiken dit ook nog eens goed is voor de performance.
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] loading schermpje

Ja dat was het plan eigenlijk, maar daarvoor moest eerst best wat code herschreven worden. Het wordt alleszins veranderd ;)
meijuh
Artikelen: 0
Berichten: 202
Lid geworden op: ma 20 nov 2006, 21:11

Re: [java] loading schermpje

ah ok, maar waarvoor maak je de loader/converter?
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] loading schermpje

Als bachelorproef, deze convertor is daar slechts een heel klein stukje van. We werken met 3 in groep samen aan karaoke speler die volledig zelf is opgebouwd waarbij je zelf teksten kan gaan synchroniseren op de muziek. Natuurlijk zitten er heel wat meer functies in, maar dat is het basis idee. Nu, omdat er reeds een systeem bestaat voor karaoke op basis van midi files, namelijk karaoke files (.kar), willen we deze ook omzetbaar maken naar ons systeem (die overigens niet met midi files werkt met gewone mp3 muziek). Het is een heel werkje geweest om uiteindelijk de omzetting te kunnen maken (karaoke files moeten zowat de minst gedocumenteerde files zijn) en daarom is de code nog steeds een beetje brik en brak werk. Binnenkort kuis ik die wat op nu ik weet dat alles werkt zoals het zou moeten ;)

Terug naar “Informatica en programmeren”