public Dimension getPreferredSize() {
   if (backPanel != null) {
     return backPanel.getPreferredSize();
   } else {
     return super.getPreferredSize();
   }
 }
    public void run() {
      if (logger.isEnabledFor(Level.DEBUG)) {
        logger.debug("About-Workerthread gestartet. " + this);
      }

      Image new_img;
      Image toDraw;
      ImageFilter filter = new ImageFilter();
      int creditsHoehe = 60;
      int creditsBreite = 135;
      int imageX = backgroundImage.getWidth(backPanel) / 2 + 20;
      int imageY = backgroundImage.getHeight(backPanel) / 2 - 15;

      filter = new CropImageFilter(imageX, imageY, creditsBreite, creditsHoehe);
      new_img = createImage(new FilteredImageSource(backgroundImage.getSource(), filter));
      filter = new CropImageFilter(0, 0, creditsBreite, creditsHoehe);
      int y = creditsHoehe;

      try {
        sleep(1000);
        Graphics g = backPanel.getGraphics();

        g.setColor(Color.BLACK);
        Graphics toDrawGraphics;
        FontMetrics fm;
        int strWidth;
        Font fontBold = new Font("Arial", Font.BOLD, 12);
        Font fontPlain = new Font("Arial", Font.PLAIN, 12);
        boolean draw = false;

        while (!isInterrupted()) {
          if (run) {
            toDraw = createImage(creditsBreite, creditsHoehe);
            toDrawGraphics = toDraw.getGraphics();
            toDrawGraphics.drawImage(new_img, 0, 0, backPanel);
            y--;
            int abstand = -15;

            for (CreditsEntry curEntry : credits) {
              if (curEntry.isUeberschrift()) {
                abstand += 20;
                toDrawGraphics.setFont(fontBold);
                toDrawGraphics.setColor(Color.BLUE);
              } else {
                abstand += 15;
                toDrawGraphics.setFont(fontPlain);
                toDrawGraphics.setColor(Color.BLACK);
              }

              fm = toDrawGraphics.getFontMetrics();
              strWidth = fm.stringWidth(curEntry.getAusgabetext());
              toDrawGraphics.drawString(
                  curEntry.getAusgabetext(), (creditsBreite - strWidth) / 2, y + abstand);
            }

            if (draw) {
              g.drawImage(toDraw, imageX - 1, imageY - 11, backPanel);
            } else {
              draw = true;
            }

            if (y == -5 - credits.size() * 15) {
              y = creditsHoehe;
            }
          }

          try {
            sleep(100);
          } catch (InterruptedException iE) {
            interrupt();
          }
        }
      } catch (Exception e) {
        logger.error(ApplejuiceFassade.ERROR_MESSAGE, e);
      }

      if (logger.isEnabledFor(Level.DEBUG)) {
        logger.debug("About-Workerthread beendet. " + this);
      }
    }