JavaFX: Menu global des applications Javafx qui ne répondent pas sur MACOS 10.15 Catalina avant de changer d'application


Lorsque je démarre l'application, le menu global s'affiche mais n'est accessible ni par la souris ni par le clavier. L'application elle-même est sensible. Lorsque je passe à une autre application, puis de nouveau, tout fonctionne comme prévu.

Il ne semble pas pertinent si l'application fournit un menu par elle-même car le même problème se produit avec le menu d'application "Java" standard tel que dans le FXHello (code ci-dessous).

Ce problème ne se produit pas sur MACOS 10.14 Mojave.

Quelqu'un d'autre a-t-il vécu cela? Si oui, existe-t-il une solution de contournement?

Exemple de code tiré des exemples JavaFX:

package hellofx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
        stage.requestFocus();
    }

    public static void main(String[] args) {
        launch();
    }

}
Author: Axel, 2019-10-30

1 answers

Je suis capable de reproduire le problème. Cependant, ma propre application du monde réel ne souffre pas de ce problème.

J'ai pu m'en débarrasser en séparant main de la classe application. Et La classe principale doit également accéder au Bureau.getDesktop. Avec cette séparation, un paramètre-Xdock:name="HelloFX" fonctionne également, qui n'avait aucun effet auparavant.

Je ne sais pas pourquoi ces mesures sont nécessaires. Les premiers appels de bureau sont également nécessaires avec les versions eralier Mac OS pour obtenir intégration correcte du système.

package hellofx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Appl extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
        stage.requestFocus();
    }
}
package hellofx;

import java.awt.Desktop;

import javafx.application.Application;

public class HelloFX {

    public static void main(String[] args) {
        registerForMacOSXEvents();
        Application.launch(Appl.class, args);
    }

    protected static void registerForMacOSXEvents() {
        Desktop desktop = Desktop.getDesktop();
        desktop.setAboutHandler(e -> System.out.println("About"));
    }

}
 1
Author: Thomas Andres, 2019-10-30 22:49:43