Flackern beim neuzeichnen von JPanel

Status
Nicht offen für weitere Antworten.

Nicole81

Aktives Mitglied
Hallöle,

ich habe ein Panel auf dem ein Label sitzt. In dieses Label lade ich 50 mal in der Sekunde ein Image.
Jetzt flackert das aber sehr stark. Kann man das irgendie verhindern?

Hier mal die Methode, welche das Bild setzt. Das ganze wird über einen Timer gesteuert:

Code:
				Image i = s2mGUI.getGrid(s2mGUI.getCurrentGridWorkspace()).getGridImage();
				Image is = null;
				
				if (rbmiQLow.isSelected())
					is = i.getScaledInstance(getWidth()-20,getHeight()-70, Image.SCALE_FAST);
				if (rbmiQHigh.isSelected())
					is = i.getScaledInstance(getWidth()-20,getHeight()-70, Image.SCALE_SMOOTH);

				ImageIcon ii = new ImageIcon(is);
				
				lImage.setIcon(ii);

Danke euch!
 

The_S

Top Contributor
Skaliere dein Image schon beim Starten des Programms auf alle Möglichen Größen/Arten und speichere dir das jeweils in z. B. einer Liste. Beim neuzeichnen greifst du dann einfach nur noch auf das bereits skalierte Image zu, anstatt das Ursprungsimage neu zu skalieren.
 

The_S

Top Contributor
Wüsste jetzt nicht, was das beim Zeichnen eines einzelnen Bildes an Vorteilen bringen soll ???:L
 

Nicole81

Aktives Mitglied
ich dachte JPanel hat double Buffering bereits implementiert.
Ich führe ja keine einzelnen Zeichenoperationen durch, sondern kopiere das gesamte Bild ja in das Label.

@hobbit
das geht leider nicht, das sich das Originalbild auch im 20ms Takt ändert. Dieses soll dann verkleinert (so ne Art prewiew) in diesem Panel angezeigt werden
 

The_S

Top Contributor
Hm, wenn alle 20 Millisekunden ein komplett neues Bild geladen, skaliert und dargestellt werden soll, ist ein gewisses flackern doch normal, schon allein dadurch, dass das Bild nicht fließend ins nächste übergeht erscheint es für das menschliche Auge "flackernt". Außerdem braucht das nunmal seine Zeit, wenn der Rechner zu schwach ist, haste da kaum eine Chance.

Wie viele unterschiedliche Bilder gibts denn zum laden/skalieren?
 

Nicole81

Aktives Mitglied
bilder gibt es unendlich viele, da in dem bild eine animation eines zeichenprogramms dargestellt wird.

habe es gerade mit 10 bzw. 2 bildern pro sekunde getestet. da flackert es komischerweise auch.
 

Wildcard

Top Contributor
Nicole81 hat gesagt.:
Hallöle,

ich habe ein Panel auf dem ein Label sitzt. In dieses Label lade ich 50 mal in der Sekunde ein Image.
Jetzt flackert das aber sehr stark. Kann man das irgendie verhindern?

Hier mal die Methode, welche das Bild setzt. Das ganze wird über einen Timer gesteuert:
Ich vermute einen javax.swing.Timer?
Das heißt du hast den kompletten Code im EDT.
Verlager das laden und eventuell auch das skalieren in einen anderen Thread.
 

masta // thomas

Bekanntes Mitglied
Ich hab den Swing Timer noch nie wirklich benutzt - bringt er irgendwelche Vorteile gegenüber einem Thread? Wann/warum ist der Einsatz des Timers sinnvoller als eines Threads?
 

Wildcard

Top Contributor
masta // thomas hat gesagt.:
Ich hab den Swing Timer noch nie wirklich benutzt - bringt er irgendwelche Vorteile gegenüber einem Thread? Wann/warum ist der Einsatz des Timers sinnvoller als eines Threads?
Du kannst schon lesen, oder?
Ich rate dazu keinen Timer zu verwenden, sondern einen Thread
 

Nicole81

Aktives Mitglied
ich habe einen java.util.Timer benutzt.

ich bin anfänger, das ist mein erster timer-einsatz, wie mache ich das mit den extra threads?
 

Wildcard

Top Contributor
masta // thomas hat gesagt.:
Meine Frage war unabhängig von dem Thema hier, lieber Wildcard ;) Oder rätst du grundsätzlich die Benutzung des Timers ab?
Warum stellst du sie dann hier?
Ein swing Timer hat den Vorteil das er leicht zu handhaben ist und das er im EDT ausgeführt wird.
Nachteilig ist, das er im EDT ausgeführt wird :wink: und das er nicht sehr genau ist.
 

Wildcard

Top Contributor
Ich weiß nicht mit was du genau Probleme hast, also lies am besten das Thread Kapitel in der Javainsel.
 

The_S

Top Contributor
Nicole81 hat gesagt.:
wildcard, wärest du so nett mir noch einen tip zu geben, wie ich das mit den extra threads mache?

zum Einen hat Wildcard recht, zum Anderen könnte es z. B. so aussehen

Code:
new Thread(new Runnable() {
   public void run() {
      while (true) {
          loadPic();
          scalePic();
          setPic();
          try {
              Thread.sleep(20);
          }
          catch (InterruptedException e){
               e.printStackTrace();
          }
      }
   }
}).start();
 

Nicole81

Aktives Mitglied
Danke Hobbit, ich hab das gestern mal so ähnlich hinbekommen, leider zieht das Bild trotzdem noch schlieren : :(
Auch bei 2-10 Bildern pro Sekunde. Das kann doch irgendwie nicht sein, es laufen doch aufwendige 3D-Spiele mit 60 Bildern pro Sekunde, da darf doch so eine verhältnismässig einfache Operation nicht flackern.


Code:
	public class S2M_GUI_Run_Thread extends Thread
	{
		private S2M_GUI_Run s2mRun;
		
		public S2M_GUI_Run_Thread(S2M_GUI_Run gr)
		{
			s2mRun = gr;
		}
				
		public void run() 
		{
			s2mRun.setImage();	
			try {t.sleep(refreshtime);} 
			catch (InterruptedException e) {e.printStackTrace();}
			run();
		}
	}



// in S2M_GUI_Run Klasse
	public void setImage()
	{
		if (this.isVisible())
		{
			try
			{
				Image i = s2mGUI.getGrid(s2mGUI.getCurrentGridWorkspace()).getGridImage();
				Image is = null;
				
				if (rbmiQLow.isSelected())
					is = i.getScaledInstance(getWidth()-20,getHeight()-95, Image.SCALE_FAST);
				if (rbmiQHigh.isSelected())
					is = i.getScaledInstance(getWidth()-20,getHeight()-95, Image.SCALE_SMOOTH);

				ImageIcon ii = new ImageIcon(is);
				
				lImage.setIcon(ii);
			}
			catch (Exception e)
			{
				
			}
		}
	}
 

The_S

Top Contributor
Naja, bei 3D-Spielen sind alle Texturen schon geladen, also im Speicher. Außerdem müssen die Grafiken nicht mehr skalliert werden. Du hast hier einen Zugriff auf das File-System, musst ein Bild auslesen/parsen und dieses dann nochmal skalieren, und das einige male pro sekunde.

Was noch etwas bringen könnte, wären zwei mehr oder minder synchronisierte Threads. Der eine Thread aktualisiert immer die Anzeige, wartet 20ms und aktualisiert dann wieder die Anzeige. Bevor der erste Thread dann schläft, teilt er dem 2. Thread mit, dass er das nächste Bild laden und skalieren soll.

Könnte aber auch sein, dass diese Vorgehensweiße nur noch das Flackern verschlimmert, aber einen Versuch ist es wert ;) .
 

Nicole81

Aktives Mitglied
Zugriff auf das file system hab ich nicht, das originalbild ist ebenfalls schon im speicher.

Ich versuche das mal mit den 2 Threads, danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Flackern beim JPanel-Übermalen AWT, Swing, JavaFX & SWT 9
J Flackern beim ersten laden von JPanel AWT, Swing, JavaFX & SWT 4
T Flackern trotz DoubleBuffering AWT, Swing, JavaFX & SWT 8
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
G Swing Flackern nach Override von paintComponent() AWT, Swing, JavaFX & SWT 3
S Swing Flackern und ausbrechen bei neuzeichnung AWT, Swing, JavaFX & SWT 7
K AWT flackern trotz buffering AWT, Swing, JavaFX & SWT 4
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
J Flackern wie mit BufferedImage beheben AWT, Swing, JavaFX & SWT 4
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
P SWT SWT flackern beheben AWT, Swing, JavaFX & SWT 9
D Undecorated JFrame ohne Flackern resizen AWT, Swing, JavaFX & SWT 21
K Flackern trotz Double-Buffering AWT, Swing, JavaFX & SWT 10
sylo Flackern des Mauszeigers bei DND AWT, Swing, JavaFX & SWT 4
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
eQuest Swing Snake repaint() "flackern" AWT, Swing, JavaFX & SWT 13
J Flackern in JEditorPane() AWT, Swing, JavaFX & SWT 14
JRTHEFROG Auflösungsabhängiges Flackern von Bildschirmmasken AWT, Swing, JavaFX & SWT 3
B JFrame flackern durch setSize() AWT, Swing, JavaFX & SWT 8
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
S animation Flackern trotz doppelpufferung wieso? AWT, Swing, JavaFX & SWT 2
U Flackern verhindern AWT, Swing, JavaFX & SWT 5
T Labels verschieben / Flackern AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Kann mir jemand beim MediaPlayer helfen ? AWT, Swing, JavaFX & SWT 2
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
steven789hjk543 Swing Verstehe etwas beim GUI nicht AWT, Swing, JavaFX & SWT 3
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
P Scrollbalken verschwinden beim Zoomen AWT, Swing, JavaFX & SWT 4
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben