EDT Problem? Kein Aufruf der repaint Methode

Planich

Aktives Mitglied
Hallo,
ich schildere zunächst mein Problem: ich habe bereits gegoogled und denke mein Problem hängt mit dem EDT zusammen. Ich habe gelesen man soll nicht GUI spezifische Arbeiten von einem extra Thread erledigen lassen. Ich glaube an diesem Punkt habe entweder Mist gebaut oder die Sache völlig falsch verstanden. Außerdem habe ich gelesen man soll nicht einfach so Komponenten erstellen über die contentPane innerhalb des Frames, sondern soll das irgendwie anders machen, das hab ich nicht ganz verstanden, vielleicht liegts auch daran.

ich poste jetzt mal den Code der für mein Problem in Frage kommt.

Java:
private void buttonZoomInActionPerformed(java.awt.event.ActionEvent evt)
       {
           //Hier lasse ich vom Thread die Arbeiten verrichten
           new Thread(new Runnable() {
                            @Override
                            public void run() {
                                
                                ownImage.increaseZoomFactor();      
                                ownImage.zoomUpdate();

                                
                            }
                        }).start();
           
           
           
           
           
           //Und hier dann die GUI spezifischen Sachen - ich dachte an der Stelle übernimmt dann       einfach der EDT wieder die Arbeit
           //Remove
           panelLeft.remove(ownPanel);
           getContentPane().remove(panelLeft);


           //OwnPanel mit geladenem BufferedImage erstellen
           ownPanel=null;
           ownPanel = new OwnPanel(ownImage.getBI());
           //dem LeftPanel das OwnPanel hinzufügen
           panelLeft=null;
           panelLeft = new JScrollPane(ownPanel); 
           getContentPane().add(panelLeft, BorderLayout.WEST);
           ownPanel.repaint();
                                
           
           //ownPanel.setImage(ownImage.getBI());
               
           //getContentPane().repaint();
            
       }

Hier mal das was im zoomUpdate() passiert
Java:
public void zoomUpdate()
        {
            //bei 16bit
            if(type==1)
            {        
            short[] data = ((DataBufferUShort) bi.getData().getDataBuffer()).getData();
            byte[] bytearr = new byte[data.length];
                       
            bytearr=shortToByte(data,ug ,og ); 
            
            byte [] bytearrZoomed = new byte[bytearr.length*zoomFactor];
            for (int i=0; i<bytearr.length;i++)
            {
                bytearrZoomed[i*2]=bytearr[i];                
                bytearrZoomed[(i*2)+1]=bytearr[i];
            }
            
            width=width*zoomFactor;
            height=height*zoomFactor;
            
            DataBufferByte buffer = new DataBufferByte(bytearrZoomed, bytearrZoomed.length);
            binew=OwnImage.create8bitBufferedImage(buffer,width,height);
            
            
            }


            //bei 8bit   
            if(type==0)
            {              
            byte[] data = ((DataBufferByte) bi.getData().getDataBuffer()).getData();

            

            DataBufferByte buffer = new DataBufferByte(data, data.length);
            binew=OwnImage.create8bitBufferedImage(buffer,width,height);
            
            }
        }

ich will einfach nur das Bild größer machen.
Durch ein System.out. im paintComponent meines OwnPanel würde ich sehen wenn er zeichnet. Macht er aber nicht und ich möchte gerne rausfinden was ich falsch mache, deshalb bitte ich euch Profis um Hilfe.

Danke
 

Planich

Aktives Mitglied
wo kann man hier editieren? oder geht das beim ersten Post im Thread gar nicht? bin wohl grad blind

also ich habe ein wenig Code geändert und kriege nun ein repaint mittels validate(), jedoch wirft er mir sofort eine Exception

Java:
private void buttonZoomInActionPerformed(java.awt.event.ActionEvent evt)
       {         
           new Thread(new Runnable() {
                            
                            public void run() {
                                
                                ownImage.increaseZoomFactor();      
                                ownImage.zoomUpdate();
                                System.out.println("Erste Methode nach Ende ZoomUpdate");
                            
                                SwingUtilities.invokeLater(new Runnable() {
                                    
                                    
                                    public void run() {
                                       //Remove
                                       panelLeft.remove(ownPanel);
                                       getContentPane().remove(panelLeft);


                                       //OwnPanel mit geladenem BufferedImage erstellen
                                       ownPanel=null;
                                       System.out.println("Fütterung    "+ownImage.getWidth()+"   "+ownImage.getHeight() );
                                       ownPanel = new OwnPanel(ownImage.getBI());
                                       ownPanel.setSize(new Dimension(1200,1500));
                                       //dem LeftPanel das OwnPanel hinzufügen
                                       panelLeft=null;
                                       panelLeft = new JScrollPane(ownPanel); 
                                       panelLeft.setSize(new Dimension(1300,1600));
                                       getContentPane().add(panelLeft, BorderLayout.WEST);
                                       System.out.println(panelLeft.getSize()+"  "+ownPanel.getSize());
                                       System.out.println(ownPanel.image.getHeight());
                                       validate();
                                       //ownPanel.repaint();
                                    }

                                
                            
                            
                                });}}).start();
           
                                
                       
       
       }

die Systemouts sind für mich zum Debuggen

Hier mal das was er mir auswirft:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 659352
at java.awt.image.DataBufferByte.getElem(DataBufferByte.java:183)
at java.awt.image.ComponentSampleModel.getDataElements(ComponentSampleModel.java:593)
at java.awt.image.Raster.getDataElements(Raster.java:1469)
at sun.java2d.loops.OpaqueCopyAnyToArgb.Blit(CustomComponent.java:126)
at sun.java2d.loops.GraphicsPrimitive.convertFrom(GraphicsPrimitive.java:542)
at sun.java2d.loops.GraphicsPrimitive.convertFrom(GraphicsPrimitive.java:523)
at sun.java2d.loops.MaskBlit$General.MaskBlit(MaskBlit.java:171)
at sun.java2d.loops.Blit$GeneralMaskBlit.Blit(Blit.java:186)
at sun.java2d.pipe.DrawImage.blitSurfaceData(DrawImage.java:927)
at sun.java2d.pipe.DrawImage.renderImageCopy(DrawImage.java:550)
at sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:54)
at sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:982)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:2979)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:2964)
at frametest.OwnPanel.paintComponent(OwnPanel.java:45)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JViewport.paint(JViewport.java:747)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)



Falls jemand helfen möchte, was schön wäre weil es wirklich dringend ist, so füge ich mal das komplette Projekt mit an

Ich bin über jede Hilfe dankbar, weil ich mit meinem Latein am Ende bin
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
das anzuzeigende Bild scheinst du während der Berechnungen nicht zu verändern, wie sieht es mit den Variablen width und height aus,
werden die in OwnPanel.paintComponent() verwendet?

grundsätzlich musst du alle Datenänderungen in SwingUtilities.invokeLater() machen,
für OwnPanel führst du das ja bereits aus
----

1 MB gepackter Anhang, das klingt nicht sehr attraktiv,
bastle ein 200 Zeilen-Programm direkt fürs Forum,

----

man kann Beiträge eine Stunde lang editieren


----
edit:
Java:
 byte [] bytearrZoomed = new byte[bytearr.length*zoomFactor];

            width=width*zoomFactor;
            height=height*zoomFactor;
hierbei ist doch grundsätzlich nicht sicher, dass bytearrZoomed.length == width*height ist, oder?
ist das egal?
 
Zuletzt bearbeitet von einem Moderator:

Planich

Aktives Mitglied
das anzuzeigende Bild scheinst du während der Berechnungen nicht zu verändern, wie sieht es mit den Variablen width und height aus,
werden die in OwnPanel.paintComponent() verwendet?
width und height werden in OwnPanel.paintComponent() nur verwendet um das Bild zentriert zu zeichnen

grundsätzlich musst du alle Datenänderungen in SwingUtilities.invokeLater() machen,
für OwnPanel führst du das ja bereits aus

Datenänderungen klingt jetzt sehr allgemein, kannst du das vielleicht näher erläutern? Und wenn ich nicht in einem extra Thread bin, dann bin ich doch eigentlich mit meinem Code im EDT und kann mir das invokeLater sparen, oder habe ich da wieder irgendwo was falsch verstanden?

1 MB gepackter Anhang, das klingt nicht sehr attraktiv,
bastle ein 200 Zeilen-Programm direkt fürs Forum,
Anders kann ich das ja nun mal hier nicht hochladen :( und ich weiß grad nicht so recht wie ich das ohne es aus dem Zusammenhang zu reißen abspecken soll. Vielleicht kann ich auch einfach mehr relevanten Code hier posten?

man kann Beiträge eine Stunde lang editieren
ah ok!

edit:
Java:
 byte [] bytearrZoomed = new byte[bytearr.length*zoomFactor];

            width=width*zoomFactor;
            height=height*zoomFactor;
hierbei ist doch grundsätzlich nicht sicher, dass bytearrZoomed.length == width*height ist, oder?
ist das egal?

ich probiere gerade erstmal vom Anfangszoomfactor 1 mit einem increase auf Zoomfactor 2 das ganze aus. In diesem Falle verdoppelt sich Höhe und Breite. Und mir fällt auch gerade auf, dass sich ja dann das bytearr nicht auch einfach verdoppelt, ich glaube hier werd ich gleich mal ansetzen. Das könnte nämlich die Exception sein

EDIT: fast hät ichs vergessen, ein riesen großes Dankeschön erstmal

EDIT2: SUPER! Genau das war der Fehler. Bin halt kein Profi. Also ich hab einfach die Arraygröße des Bildes falsch berechnet. Jetzt muss ich nur die Farbwerte in das "neue" Array richtig setzen, das scheint grad auf Anhieb nicht so trivial.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
an die quadratische Erhöhung hatte ich (auch) gar nicht gedacht, nur die Rundungsdifferenz ;)

> Datenänderungen klingt jetzt sehr allgemein, kannst du das vielleicht näher erläutern?
alles worauf der EDT/AWT-Thread parallel zugreift, also GUI-Daten wie das Bild, Model von JTable, JList usw.

> Und wenn ich nicht in einem extra Thread bin, dann bin ich doch eigentlich mit meinem Code im EDT
> und kann mir das invokeLater sparen, oder habe ich da wieder irgendwo was falsch verstanden?

richtig, aber du bist ja anscheinend in einem extra Thread
 
Zuletzt bearbeitet von einem Moderator:

Planich

Aktives Mitglied
Statt den Zoom manuell über ein neues Array zu erledigen, was echt nervenaufreibend wäre, habe ich mich für g2.drawImage(image, 0, 0, newW, newH, null); mit den angepassten Imagegrößen entschieden. Das ist um ein vielfaches einfacher zu implementieren.
Im Moment ist alles super, danke nochmal :)

Edit: kann ich meinen Anhang oben irgendwie wieder löschen?
Wenn nein, kannst du das als Mod bitte für mich machen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem mit verschachtelten Events und kein ausweg in sicht AWT, Swing, JavaFX & SWT 3
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
L Swing Vier Gewinnt Problem AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben