Devilmarkus Geschrieben 24. August 2009 Geschrieben 24. August 2009 Hallo zusammen, nach dem aktuellen JAVA-Update funktioniert bei mir die Methode this.setDoubleBuffered(true); nicht mehr. Ist das ein BUG in der aktuellen Version oder geht das irgendwie zu beheben? Denn es nervt extrem, wenn die Ausgabe am flimmern ist, und man einzelne Sachen garnicht mehr sieht. (Den Source nun hier reinkopieren hat, denk ich, wenig Sinn, es ist ein Display, welches ein Image "painted" (g.drawImage...) und über dieses Image andere Sachen pinseln soll, welche neuerdings nur noch flimmern / fast garnicht mehr zu sehen sind) Bis vor Kurzem hat es noch wunderbar funktioniert. Seit dem letzten Update wie gesagt nicht mehr. Wer kann mir hier weiterhelfen? MfG Markus Zitieren
flashpixx Geschrieben 24. August 2009 Geschrieben 24. August 2009 Ist das ein BUG in der aktuellen Version oder geht das irgendwie zu beheben? Bug ID: 4967886 Swing should provide full double buffering per window Du scheinst eine veraltete Java Version einzusetzen, da Du hier ja keine Version nennst Zitieren
Devilmarkus Geschrieben 24. August 2009 Autor Geschrieben 24. August 2009 (bearbeitet) Bug ID: 4967886 Swing should provide full double buffering per window Du scheinst eine veraltete Java Version einzusetzen, da Du hier ja keine Version nennst jdk1.6.0_16 (Hatte ich nicht erwähnt: neu installiert heute?) Ausserdem: jre1.6.0_15 Edit: Ich verwende NetBeans 6.7.1 Bearbeitet 24. August 2009 von Devilmarkus Zitieren
flashpixx Geschrieben 25. August 2009 Geschrieben 25. August 2009 Da nur Du anscheinend dieses Problem hast, es lässt sich kein Bug diesbezüglich finden, wird wohl der Fehler in Deinem Code liegen Zitieren
Devilmarkus Geschrieben 25. August 2009 Autor Geschrieben 25. August 2009 Ich wurde von anderen drauf aufmerksam gemacht... Komischerweise lief es ja noch bis zum vorletzten Update. Ich werde später mal Teile des Sources hier reinsetzen. Vielleicht fällt ja jemandem etwas auf. Zitieren
Devilmarkus Geschrieben 25. August 2009 Autor Geschrieben 25. August 2009 So nach einem längeren Test habe ich nun herausgefunden: Bis zum Java 1.6 Update 13 funktioniert es noch. Ab Java 1.6 Update 14 flimmert es nur noch. (Gut, dass Sun ältere Versionen parat hat) Das Display zeigt ein Bild an und aktualisiert bei ca. 50fps. Über das Bild werden Icons / bzw andere Grafiken/Text gezeichnet. (Im Idealfall 50fps, ältere PCs zeigen nur weniger an) Hier Auszüge aus dem Sourcecode: public Display() { int[] pixelsc = new int[16 * 16]; imagec = Toolkit.getDefaultToolkit().createImage( new MemoryImageSource(16, 16, pixelsc, 0, 16)); blankCursor = Toolkit.getDefaultToolkit().createCustomCursor (imagec, new Point(16, 16), "invisibleCursor"); gunCursor = Toolkit.getDefaultToolkit().createCustomCursor (lightGun, new Point(16, 16), "gunCursor"); setCursor(blankCursor); enableEvents(AWTEvent.FOCUS_EVENT_MASK); setFocusTraversalKeysEnabled(true); setRequestFocusEnabled(true); setDoubleBuffered(true); } ................ public void updateImage(boolean wait) { painted = false; if (imageRect.width != 0 && imageRect.height != 0 && isShowing()) { raster.setDataElements(0,0,imageWidth,imageHeight,pixels); repaint(0,imageRect.x,imageRect.y,imageRect.width,imageRect.height); if (wait) waitPainted(); } } ................. protected void paintImage(Graphics g) { if (showfps >=1) doTouchFPS(); if (showfps <=-1 && debug){ showfps++; doTouchFPS(); } if (Switches.bilinear && !lowperformance){ Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g = g2; } if (sourceRect != null){ g.drawImage(image,imageRect.x,imageRect.y,imageRect.x + imageRect.width, imageRect.y + imageRect.height,sourceRect.x,sourceRect.y, sourceRect.x + sourceRect.width,sourceRect.y + sourceRect.height,null); } else if (sameSize){ g.drawImage(image,imageRect.x,imageRect.y,null); } else g.drawImage(image,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null); } else{ if (skin == 1) g.drawImage(YMmode,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null); else { g.drawImage(YMmode2,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null); } if (!lowperformance) paintBalls(g); } ................ [Weitere Routinen, wo noch mehr gezeichnet wird] } public void doTouchFPS() { long time = System.currentTimeMillis(); mNextFPS++; if (time-mLastFPSTime >= 1000) { mCurrFPS = mNextFPS; mNextFPS = 0; mLastFPSTime = time; } } @Override public void paintComponent(Graphics g) { if (image != null){ paintImage(g); } painted = true; } So in etwa.... (Wer den kompletten Code sehen möchte, bitte melden) Wie gesagt: ab 1.6 Update 14 flimmert es nur noch. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.