De nuevo, la clave es es el diálogo modal o no?
Si es modal, entonces no hay necesidad de un WindowListener ya que sabrá que el diálogo se ha tratado ya que el código se reanudará inmediatamente debajo de su llamada al setVisible(true)
en el cuadro de diálogo. es decir, esto debería funcionar:
projectDialog = new FilePathDialog();
projectDialog.setVisible(true);
doWork(); // will not be called until the dialog is no longer visible
Si por el contrario es el modo de menos, entonces un WindowListener debería funcionar, y lo más probable es que tienes otro problema en el código no se muestra aquí, y usted querrá para publicar un sscce para analizar, ejecutar y modificar.
Editar para gpeche
Por favor, echa un vistazo a este SSCCE que muestra que los 3 tipos de parámetros de cierre por defecto activarán la ventana oyente:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogClosing {
private static void createAndShowGui() {
JFrame frame = new JFrame("DialogClosing");
JPanel mainPanel = new JPanel();
mainPanel.add(new JButton(new MyAction(frame, JDialog.DISPOSE_ON_CLOSE, "DISPOSE_ON_CLOSE")));
mainPanel.add(new JButton(new MyAction(frame, JDialog.HIDE_ON_CLOSE, "HIDE_ON_CLOSE")));
mainPanel.add(new JButton(new MyAction(frame, JDialog.DO_NOTHING_ON_CLOSE, "DO_NOTHING_ON_CLOSE")));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class MyAction extends AbstractAction {
private JDialog dialog;
private String title;
public MyAction(JFrame frame, int defaultCloseOp, final String title) {
super(title);
dialog = new JDialog(frame, title, false);
dialog.setDefaultCloseOperation(defaultCloseOp);
dialog.setPreferredSize(new Dimension(300, 200));
dialog.pack();
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
System.out.println(title + " window closed");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println(title + " window closing");
}
});
this.title = title;
}
@Override
public void actionPerformed(ActionEvent arg0) {
dialog.setVisible(true);
}
}
¿Es un cuadro de diálogo modal? Si es así, no agregaría un oyente de ventana, especialmente después de que el diálogo se haga visible. En cambio, se ha tratado el diálogo cuando se alcanza la línea después de 'projectDialog.setVisible (true);'. –
¿Intentó agregar el oyente antes de hacer visible la ventana? –
Esto no debería importar. Si se trata de un diálogo modal (que es lo que está aludiendo), el código se reanudará justo después de setVisible (verdadero), por lo que no habría necesidad de un oyente. Si se trata de un diálogo no modal, el oyente funcionará independientemente de cuándo se agregue. –