Event Handling Externe Method schliesst Hauptapplikation

henri21

Mitglied
Ich versuche gerade einen externen PDF Viewer zu starten. Dies funktioniert aber sobald ich das Fenster des PDFViewers schliesse, schliesst dieser das ganze Programm.

Der Viewer ist so in die Hauptapplikation eingebunden:
Java:
package app.out;

import com.sun.pdfview.PDFViewer;
import java.io.File;
import java.io.IOException;
import app.GUI;
import support.E_loglevel;
import support.log;

/**
 * Interner PDF Viewer
 * @author 
 * @version 1.0
 */
public class PDFView{
 
    /**
     * PDF öffnen
     * @param file Datei
     * @param title Fenstertitel
     */
    public void viewPDF(File file, String title){

       PDFViewer pdfv = new PDFViewer(false);
       
       try {
            pdfv.openFile(file) ;
        } catch (IOException ex) {
            log.new_msg("Internes PDF konnte nicht geöffnet werden!", E_loglevel.error);
        }
       
        pdfv.setTitle(title);
        pdfv.setIconImage(GUI.get_FGUI().getIconImage()); 
        pdfv.getJMenuBar().getMenu(0).getItem(0).setEnabled(false);
        pdfv.setVisible(true);
      
    }
    
}

Ich habe jergendwie keinen Zugriff auf das JFrame des PDFViewers. Kann ich sonst die Methode setDefaultClose() ändern? Oder Ähnlich?
 
I

IMartin

Gast
Code:
PDFViewer
ist ein
Code:
JFrame
. Der besitzt einen
Code:
WindowListener
, der in
Code:
windowClosing(WindowEvent)
die Methode
Code:
doQuit()
aufruft, welche
Code:
System.exit(0)
ausführt.

Möglichkeiten unter anderem: Viewer umschreiben, eigenen Viewer schreiben oder den Listener ersetzen.
 

Noctarius

Top Contributor
Jeder der irgendwo System.exit aufruft (vor allem in wiederverwendbarem Code) gehört erschlagen, so einfach ist das ;-)
Und wenn jemand meint, bei UI Apps müsste man das, der hat Multithreading nicht verstanden.
 

henri21

Mitglied
Problem gelöst.
PDFViewer.class decompiliert -> PDFViewer.jad bearbeitet und wieder compiliert.

Original:
Java:
public void doQuit()
    {
        doClose();
        dispose();  
        System.exit(0)
    }

Neu:
Java:
public void doQuit()
    {
        doClose();
        this.setVisible(false);
        dispose();   
    }

Vielen Dank!
 

Noctarius

Top Contributor
Vielleicht wäre es besser eine Subclass mit überschriebener doQuit Methode zu erzeugen anstatt zu dekompilieren. Mit deinem Ansatz musst du daran denken den Schritt jedesmal zu machen wenn du die Version aktualisierst.
 

henri21

Mitglied
Stimmt! Besser ist:
Java:
package support;

import com.sun.pdfview.PDFViewer;

/**
 * Startet internen PDF Viewer
 * @author
 * @version 1.0
 */
public class kkp7PDFViewer extends PDFViewer {

    public kkp7PDFViewer(boolean thumbs) {
        super(thumbs);
    }
    
    // doQuit überschreiben um System.exit(0) zu umgehen
    @Override
    public void doQuit(){
        doClose();
        this.setVisible(false);
        dispose();
    }
    
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Augenblau JavaFX Externe Schriftart über CSS ansprechen und zuweisen AWT, Swing, JavaFX & SWT 5
A Swing Externe Klassen aufrufen und in einem bereits vorhandenen Container einfügen AWT, Swing, JavaFX & SWT 0
X buttons aus externe klasse lesen? AWT, Swing, JavaFX & SWT 3
A Swing Externe Schriftart mitkompilieren für andere PCs? AWT, Swing, JavaFX & SWT 3
C Swing Verlinken auf externe Prozesse bsp. Mailprogramm, Inet. Browser AWT, Swing, JavaFX & SWT 6
R LookAndFeel auf Gui Layout (externe Klasse) zugreifen AWT, Swing, JavaFX & SWT 6
T [SWT] Externe Programmfenster einbinden AWT, Swing, JavaFX & SWT 2
X Externe Anwendungen in JInternalframe starten. AWT, Swing, JavaFX & SWT 5
S Tastaturevents an eine externe Applikation weiter leiten AWT, Swing, JavaFX & SWT 6
W Externe Programme in JFrame starten AWT, Swing, JavaFX & SWT 4
G externe klassen auf gui objekte zugreifen lassen AWT, Swing, JavaFX & SWT 11
G externe ActionListener Klasse AWT, Swing, JavaFX & SWT 3
M JavaFX Non-static method 'widthProperty()' cannot be referenced from a static context AWT, Swing, JavaFX & SWT 4
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
B AWT actionPerformed Method funktioniert nicht AWT, Swing, JavaFX & SWT 12
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
U JavaFX Error: Handler Method not found AWT, Swing, JavaFX & SWT 3
H Swing Spiel: Maexchen: method cannot be applied to given types AWT, Swing, JavaFX & SWT 3
T Swing No suitable Method found for add AWT, Swing, JavaFX & SWT 4
N Swing Exception: Comparison method violates its general contract! AWT, Swing, JavaFX & SWT 13
J Calling a method from another class AWT, Swing, JavaFX & SWT 2
hdi ViewportView der JScrollPane - welche Method synchronisiert? AWT, Swing, JavaFX & SWT 15
G Method drawLine() AWT, Swing, JavaFX & SWT 14
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
K Dialog schliesst sich nicht. Warum? AWT, Swing, JavaFX & SWT 11
B JDialog schliesst nicht AWT, Swing, JavaFX & SWT 22

Ähnliche Java Themen

Neue Themen


Oben