Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不关注macOS的Java JDialog交互_Java_Macos_Swing_Focus_Jdialog - Fatal编程技术网

不关注macOS的Java JDialog交互

不关注macOS的Java JDialog交互,java,macos,swing,focus,jdialog,Java,Macos,Swing,Focus,Jdialog,我知道围绕这个问题有很多讨论,但这是不同的。我们有一个java应用程序,它在Windows上的键盘事件上显示JDialog(本机钩子)。它工作正常,当我在java窗口中单击某个内容时,当前应用程序的焦点不会丢失。在macOS上,它将活动应用程序更改为MyJava窗口。我用以下命令隐藏了停靠图标: -Dglass.taskbarApplication=false 但这还不够,我希望我的java应用程序永远不会被关注。我读到了headless属性,但它无法工作,因为我显示了JDialog。它在Wi

我知道围绕这个问题有很多讨论,但这是不同的。我们有一个java应用程序,它在Windows上的键盘事件上显示JDialog(本机钩子)。它工作正常,当我在java窗口中单击某个内容时,当前应用程序的焦点不会丢失。在macOS上,它将活动应用程序更改为MyJava窗口。我用以下命令隐藏了停靠图标:

-Dglass.taskbarApplication=false

但这还不够,我希望我的java应用程序永远不会被关注。我读到了headless属性,但它无法工作,因为我显示了JDialog。它在Windows上工作得很好,但在Mac上,托盘应用程序可能不一样。这可能吗?JDialog有问题吗?或者我可以添加一些参数在后台运行java应用程序吗?感谢

注意:以下解决方案仅在OS X上测试

强制
JDialog
具有如下所示的类型似乎是可行的

dialog.setType(Window.Type.POPUP);
这使得对话框可以聚焦,当它获得焦点时,其他窗口不会失去焦点,比如弹出菜单。但是,它还具有其他效果,例如使对话框的行为如同调用了
dialog.setAlwaysOnTop(true)
一样


注意:下面的示例应用程序会在启动时解除其他窗口的焦点,但不会在未聚焦的窗口再次聚焦后解除

示例:

import java.awt.EventQueue;
import java.awt.Window;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class NonUnfocusingDialogExample {

    public static void main(final String[] args) {
        EventQueue.invokeLater(() -> {
            final JDialog dialog = new JDialog();
            dialog.setType(Window.Type.POPUP);
            dialog.getContentPane().add(new JLabel("Hello World!", 
                    SwingConstants.CENTER));
            dialog.pack();
            dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            dialog.setTitle("Test Dialog");
            dialog.setLocationByPlatform(true);
            dialog.setVisible(true);
        });
    }

}