Loading Screen anzeigen bei Black Screen

memuench

Mitglied
Hallo zusammen,
Ich habe eine GUI erstellt mit LayoutManager. Wenn ich dort auf einen bestimmten Knopf drücke, wird diese Klasse ausgeführt:
Java:
package pdf;

import java.awt.SplashScreen;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import org.apache.pdfbox.pdfviewer.PDFPagePanel;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

public class PDFViewer {
  int currentPageNo = 0;
 
  public PDFViewer(String path) {
    //ImageIcon logo = new ImageIcon("resources/BASF_logo_logotype.png");//Splashscrreen

    File pdf_path = new File(path);
    try {
     PDDocument inputPdf = PDDocument.load(pdf_path);
      List<PDPage> allPgs = inputPdf.getDocumentCatalog().getAllPages();
      PDPage testPage = (PDPage)allPgs.get(0);
     
      JFrame testFrame = new JFrame();
      testFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      testFrame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          try {
            inputPdf.close();
            testFrame.setVisible(false);
          } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
          }
       
        }
      });
      PDFPagePanel pdfPanel = new PDFPagePanel();
      pdfPanel.setPage(testPage);
      testFrame.add(pdfPanel);
      testFrame.setBounds(0, 0, pdfPanel.getWidth(), pdfPanel.getHeight()+50);
      testFrame.addKeyListener(new KeyAdapter() {

        @Override
        public void keyTyped(KeyEvent e) {
          // TODO Auto-generated method stub
         
        }

        @Override
        public void keyPressed(KeyEvent e) {
          if(e.getKeyCode() == KeyEvent.VK_DOWN ) {
            if(currentPageNo < allPgs.size()-1) {
              currentPageNo++;
              PDPage currentPage = (PDPage)allPgs.get(currentPageNo);
              pdfPanel.setPage(currentPage);
              testFrame.add(pdfPanel);
              testFrame.invalidate();
              testFrame.validate();
              testFrame.repaint();
             
            }
          }
         
          if(e.getKeyCode() == KeyEvent.VK_UP) {
            if(currentPageNo>0) {
              currentPageNo--;
              PDPage currentPage = (PDPage)allPgs.get(currentPageNo);
              pdfPanel.setPage(currentPage);
              testFrame.add(pdfPanel);
              testFrame.invalidate();
              testFrame.validate();
              testFrame.repaint();
            }
          }
         
        }

        @Override
        public void keyReleased(KeyEvent e) {
          // TODO Auto-generated method stub
         
        }
       
      });
     
      testFrame.setVisible(true);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

}

Der Code tut was er soll, jedoch braucht es ewig, damit der PDF Viewer angezeigt wird. Während es lädt, also noch kein Reader zu sehen ist, wollte ich einen Ladebildschirm implementieren (mithilfe eines Splashscreens nehme ich an?), der ein GIF anzeigt, bis eben der Reader fertig geladen ist. Im Internet sind die Tutorials zu dem Thema eher mager und oft werden pro Tutorial andere Vorgänge genommen. Hat jemand einen Ansatz wie ich hier vorgehe??

Vielen Dank im Voraus
 
Ich habe dir ein Beispiel gebastelt.

Java:
import java.awt.*;
import javax.swing.*;

public class Hauptprogramm {

    public static void main(String[] args) {
             Hauptfenster hauptfenster = new Hauptfenster();
    }

}

class Hauptfenster extends JFrame {

    private FuerLogo f;

    public Hauptfenster() {

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setTitle("Beispiel fuer memuench");
        this.setPreferredSize(new Dimension(500, 500));
        this.f = new FuerLogo();
        this.pack();
        this.setVisible(true);
        this.f.setVisible(true);
    }

}

class FuerLogo extends JWindow {

    public FuerLogo() {

        JButton btnLogo = new JButton();
        this.add(btnLogo);

        ImageIcon logo = new ImageIcon("resources/BASF_logo_logotype.png");
        btnLogo.setIcon(logo);

        btnLogo.setPreferredSize(new Dimension(logo.getIconWidth(), logo.getIconHeight()));

        // Deckkraft
        this.setOpacity(1.0f);

        this.pack();

        // Position bestimmen: mittig.
        this.setLocationRelativeTo(null);
    }

}
 

Zurück
Oben