Окно приложения Java Swing исчезает при перемещении на другой экран/рабочий стол/дисплей в Mac OS X

Окно приложения Java Swing исчезает всякий раз, когда я перетаскиваю его с помощью мыши с одного монитора на другой. Это видно, пока я перетаскиваю его, но он сразу исчезает, когда я отпускаю кнопку мыши. Я бы предпочел, чтобы окно не исчезло. Почему он исчезает?

Когда я активирую Mission Control, окно Swing появляется внизу рабочего стола, где я его перетаскивал. Деактивация управления миссией приводит к тому, что он соскальзывает в нижней части экрана.

Не имеет значения, какое приложение Java Swing запускаю. Для тех, кто хочет код, здесь простое приложение Java Swing, демонстрирующее поведение, которое я описываю, наслаждаюсь:

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

class SimpleSwing {
    public static void main(final String... args) {
        SwingUtilities.invokeLater(new Runnable() {
                @Override public void run() {
                    JFrame frame = new JFrame();
                    JPanel contentPane = new JPanel();
                    contentPane.add(new JLabel("Hello World!"));
                    frame.setContentPane(contentPane);
                    frame.pack();
                    frame.setVisible(true);
                }
            });
    }
}

Моя среда - это Oracle Java JDK (последняя на момент написания этой статьи) в Mac OS X Yosemite (последняя на момент написания этой статьи):

java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

OS X Yosemite Version 10.10.2 (14C1510)
Darwin Kernel Version 14.1.0

Ответы

Ответ 1

Попробуйте следующее:

  • Перейдите к Системные настройки > Дисплеи > Расположение
  • Совместите два прямоугольника отлично
  • Посмотрите, работает ли он.
  • Если нет, измените порядок двух прямоугольников (и мониторы или подключите их по-разному)

Надеюсь, это поможет, но я не уверен, что это решение.

Ответ 2

Шаг: до frame.setVisible(true); вы можете добавить ниже двух строк кода, а затем снова проверить.

frame.setLocation(500, 500); frame.setAlwaysOnTop(истина);