Я разрабатываю приложение javaFX для Linux на Red Hat 6.8 x64, используя java 8u162 и графический процессор NVidia (и его последний драйвер) с двумя экранами Full HD.
У меня проблема с получением количества физических экранов:
- , когда X-сервер находится в режиме расширенного рабочего стола (2 физических экрана, но
один логический (от 0 до 3840 пикселей), Screen.getScreens () возвращает 2
Экран (что нормально)
- Когда X-сервер находится в режиме отдельного рабочего стола (2 физических экрана и
2 логических экрана от 0 до 1920 пикселей), Screen.getScreens () возвращает 1
Экран ==> это нормально или ошибка?
Я сравнил API JavaFX с API AWT:
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment ();
GraphicsDevice [] gdev = env.getScreenDevices ();
AWT возвращает 2 устройства экрана в обоих режимах конфигурации.
Я также проверил java 9 и java 10 на машине с ubuntu x64 и получил ту же проблему с JavaFX.
Я попытался отладить это, и похоже, что проблема в libglass.so в нативном коде.
Что вы думаете об этом? Я что-то пропустил ?
вот код, который воспроизводит проблему:
public class ScreenTest extends Application {
private static final int SIZE = 1600;
private final AnchorPane root = new AnchorPane();
@Override
public void start(Stage primaryStage) throws Exception {
root.backgroundProperty().set(new Background(new BackgroundFill(Color.BEIGE, null, null)));
Scene scene = new Scene(root, SIZE, SIZE);
primaryStage.show();
Screen.getScreens().forEach(screen -> System.out.println("JAVAFX :"+ screen));
GraphicsEnvironment env =GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gdev = env.getScreenDevices();
for (GraphicsDevice d : gdev) {
System.out.println("AWT:" + d);
}
}
public static void main(String... strings) {
launch(strings);
}
}
Вот моя конфигурация xorg.conf X11:
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "Files"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "CMN"
HorizSync 53.0 - 66.0
VertRefresh 48.0 - 60.0
Option "DPMS"
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Unknown"
ModelName "DELL C7017T"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 76.0
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Quadro K3100M"
BusID "PCI:1:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Quadro K3100M"
BusID "PCI:1:0:0"
Screen 1
EndSection