Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.