Springen naar inhoud

[java] loading schermpje


  • Log in om te kunnen reageren

#1

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 09 april 2009 - 14:04

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:

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? ;)

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

meijuh

    meijuh


  • >100 berichten
  • 202 berichten
  • Ervaren gebruiker

Geplaatst op 09 april 2009 - 20:06

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

#3

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 april 2009 - 10:04

Op die manier kan ik die dialog natuurlijk nooit meer gesloten krijgen toch?

#4

meijuh

    meijuh


  • >100 berichten
  • 202 berichten
  • Ervaren gebruiker

Geplaatst op 10 april 2009 - 11:38

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.

#5

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 april 2009 - 12:42

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? ;)

#6

meijuh

    meijuh


  • >100 berichten
  • 202 berichten
  • Ervaren gebruiker

Geplaatst op 10 april 2009 - 13:14

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

Of als dat niet werk even kijken naar http://java.sun.com/...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.

#7

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 april 2009 - 15:18

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.

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 ;)

Veranderd door Cycloon, 10 april 2009 - 15:21


#8

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 april 2009 - 15:37

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 ;)

#9

meijuh

    meijuh


  • >100 berichten
  • 202 berichten
  • Ervaren gebruiker

Geplaatst op 10 april 2009 - 17:18

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.

#10

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 april 2009 - 18:02

Ja dat was het plan eigenlijk, maar daarvoor moest eerst best wat code herschreven worden. Het wordt alleszins veranderd ;)

Veranderd door Cycloon, 10 april 2009 - 18:02


#11

meijuh

    meijuh


  • >100 berichten
  • 202 berichten
  • Ervaren gebruiker

Geplaatst op 10 april 2009 - 19:21

ah ok, maar waarvoor maak je de loader/converter?

#12

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 april 2009 - 19:36

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 ;)





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures