Sposób na wyświetlanie JDialog'a na wybranym monitorze.

0

Hej,

Chcę wyświetlać JDialog na wybranym przez użytkownika monitorze. Korzystam m. in. z poniższej metody:

/*
 * SHOW ON SPECIFIC MONITOR
*/
public void showOnScreen(GraphicsDevice[] screenlist, int screen, JDialog dialog) {
     if (screen > -1 && screen < screenlist.length) {
          try {
               screenlist[screen].setFullScreenWindow(dialog);
          } catch (NullPointerException e) {
               e.printStackTrace();
          }
     } else if (screenlist.length > 0) {
          screenlist[0].setFullScreenWindow(dialog);
     } else {
          throw new RuntimeException("No Screens Found");
     }
}

JDialog się uruchamia i wszyscy są szczęśliwi, ale problem w tym, że metoda setFullScreenWindow zwraca mi NullPointerException. Macie jakieś pomysły jak temu zaradzić?

Będę wdzięczny za wskazówki.

Pozdrawiam.

0

Metoda setFullScreenWindow zwraca Ci NullPointerException? Nie wierzę. Sprawdź czy screenlist[0] nie jest nullem.

0

Nie jest, nie jest... : /

EDIT

Wywołuję tą metodę pod buttonem:

buttonStartDemo.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
          VisualField_DemoSession_JDialog dialog = new VisualField_DemoSession_JDialog();
          installEscapeCloseOperation(dialog);
          GraphicsDevice[] screenlist = getScreenList();
          if (screenlist.length > 1) {
               Object[] options = {"1", "2"};
               int n = JOptionPane.showOptionDialog(new JFrame(), "On which screen you want to open Demo Session?", "Question!", JOptionPane.YES_NO_OPTION, 
                         JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
               if (n == JOptionPane.YES_OPTION) {
                    showOnScreen(screenlist, 0, dialog);
               } else if (n == JOptionPane.NO_OPTION) {
                    showOnScreen(screenlist, 1, dialog);
               }
          } else if (screenlist.length == 1) {
               showOnScreen(screenlist, 0, dialog);
          } else {
               throw new RuntimeException("No Screens Found");
          }
     }
});

A metoda getScreenList() wygląda tak:

/*
 * GET MONITORS LIST
 */
public GraphicsDevice[] getScreenList() {
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
     GraphicsDevice[] gs = ge.getScreenDevices();
     return gs;
}

Poza tym tak jak powiedziałem JDialog otwiera się ładnie i pełnoekranowo. Dopiero po zamknięciu pluje Nullem : /

EDIT 2013/09/30, 8:10 pm

Problem rozwiązany. NPE był zgłaszany dla wywoływania setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) w klasie rozszerzającej JDialog.

Pozdrawiam serdecznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1