Veröffentlicht 24. August 200916 j 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
24. August 200916 j 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
24. August 200916 j Autor 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 200916 j von Devilmarkus
25. August 200915 j Da nur Du anscheinend dieses Problem hast, es lässt sich kein Bug diesbezüglich finden, wird wohl der Fehler in Deinem Code liegen
25. August 200915 j Autor 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.
25. August 200915 j Autor 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.