Performance Problem mit einer kleinen Java Anwendung

redneb

Mitglied
Hallo,

ich habe eine kleine Laufschrift mit Java programiert. Der Text steht in einem JTextPane und diese wird mit .setLocation(x,y) verschoben. Wenn ich das Programm auf meinem PC laufen lasse, läuft alles wir geplant. Wenn ich die Laufschrift auf dem Zielsystem laufen lasse, schwankt die Geschwindigkeit der Schrift. Auf diesem System läuft noch eine Applikation die Bilder und andere Animationen anzeigt. Diese Animationen laufen auch wie gewohnt gleich schnell, nur die Java Anwendung läuft langsamer, bzw. schwankend, je nachdem wie das andere Programm Rechenleistung braucht. Setzte ich in Windows die Priorität der Laufschrift auf Echtzeit, laufen beide Anwendungen wie gewünscht, nur leider kann ich die Laufschrift schlecht mit der Priorität Echtzeit laufen lassen, da das System stabil sein muss.

Die Bewegung der Laufschrift findet in einer Endlos while Schleife mit einer kleinen Pause statt.

Code:
boolean isRunningOrig	= true;
boolean isRunningClone	= false;
 
int TickerSpacer		= 100;
 
TickerText.setLocation(this.getSize().width, TickerText.getLocation().y);
TickerTextClone.setLocation(this.getSize().width, TickerTextClone.getLocation().y);
 
while(true)
{
	try{ Thread.sleep(5); }catch(Exception ex){}
	
	

	
	
	if(isRunningOrig)	
	{
		TickerText.setLocation(TickerText.getLocation().x - 1, TickerText.getLocation().y);
	}
	
	if(isRunningClone)
	{
		TickerTextClone.setLocation(TickerTextClone.getLocation().x - 1, TickerTextClone.getLocation().y);
	}

	
	if( TickerText.getLocation().x == ((this.getWidth() - TickerText.getWidth()) - TickerSpacer) )
		isRunningClone = true;			
	
	
	if( TickerTextClone.getLocation().x == ((this.getWidth() - TickerTextClone.getWidth()) - TickerSpacer) )
		isRunningOrig = true;			


	
	if( TickerText.getLocation().x < (TickerText.getSize().width * (-1)) )
	{			
		TickerText.setLocation(this.getSize().width, TickerText.getLocation().y);
		isRunningOrig = false;
		
		if( ((TickerText.getWidth() * 2) + TickerSpacer) < this.getWidth() )
			isRunningOrig = true;
		
	}

	
	if( TickerTextClone.getLocation().x < (TickerTextClone.getSize().width * (-1)) )
	{			
		TickerTextClone.setLocation(this.getSize().width, TickerTextClone.getLocation().y);
		isRunningClone = false;
		
		if( ((TickerText.getWidth() * 2) + TickerSpacer) < this.getWidth() )
			isRunningClone = true;				
		
	}
	

	this.repaint();
}


Würde mich freuen wenn Ihr Verbesserungsvorschläge bzw. eine Lösung habt, wie ich beide Anwendungen laufen lassen kann, ohne dass die Laufschrift in unterschiedlichen Geschwindigkeiten läuft.
 
Hallo,

MeinerEiner hat gesagt.:
Ich denke, ich würde das ein wenig anders machen. Statt eine Komponente dauernd zu verschieben, würde ich eher den String über ein Graphics Objekt zeichnen und diesen dann verschieben...

So würde ich es auch machen. Aber statt g.drawString ständig aufzurufen, würde ich den String in ein Image zeichnen und das Image mit g.drawImage immer wieder neu positionieren und zeichnen. Das ist nochmal ein bischen schneller als drawString.

MFG

zEriX
 
Zurück