Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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
Java从托盘还原JFrame_Java_Swing - Fatal编程技术网

Java从托盘还原JFrame

Java从托盘还原JFrame,java,swing,Java,Swing,我有一个应用程序,它实现了智能卡阅读器的侦听器 当我运行应用程序时,我将它发送到托盘 当应用程序检测到一张卡时,我希望它将jFrame恢复正常,以便用户可以选择屏幕上可用的选项 问题是,当我尝试恢复窗口时,它会创建一个新窗口。 如何将jFrame恢复正常 这是我在jFrame构造函数中的代码: 它将创建托盘图标以及关闭和打开选项。但我希望它能自动打开。是否可以通过编程方式单击“打开”选项 initComponents(); setResizable(false); set

我有一个应用程序,它实现了智能卡阅读器的侦听器

当我运行应用程序时,我将它发送到托盘

当应用程序检测到一张卡时,我希望它将jFrame恢复正常,以便用户可以选择屏幕上可用的选项

问题是,当我尝试恢复窗口时,它会创建一个新窗口。 如何将jFrame恢复正常

这是我在jFrame构造函数中的代码: 它将创建托盘图标以及关闭和打开选项。但我希望它能自动打开。是否可以通过编程方式单击“打开”选项

    initComponents();
    setResizable(false);
    setLocationRelativeTo(null);
    setTitle("App Title");
    UFRInstance = (uFrFunctions) Native.loadLibrary(GetLibFullPath(false), uFrFunctions.class);
    this.wsc = new WebSocketConnection();

    System.out.println("creating instance");
    try {
        System.out.println("setting look and feel");
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
        System.out.println("Unable to set LookAndFeel");
    }
    if (SystemTray.isSupported()) {
        System.out.println("system tray supported");
        tray = SystemTray.getSystemTray();

        Image image = Toolkit.getDefaultToolkit().getImage("bulb.png");
        ActionListener exitListener = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Exiting....");
                System.exit(0);
            }
        };
        PopupMenu popup = new PopupMenu();
        MenuItem defaultItem = new MenuItem("Close");
        defaultItem.addActionListener(exitListener);
        popup.add(defaultItem);
        defaultItem = new MenuItem("Open");
        defaultItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(true);
                setExtendedState(JFrame.NORMAL);
            }
        });
        popup.add(defaultItem);
        trayIcon = new TrayIcon(createIcon("bulb.png", "Icon"), "SystemTray Demo", popup);
        trayIcon.setImageAutoSize(true);
    } else {
        System.out.println("system tray not supported");
    }
    addWindowStateListener(new WindowStateListener() {
        public void windowStateChanged(WindowEvent e) {
            if (e.getNewState() == ICONIFIED) {
                try {
                    tray.add(trayIcon);
                    setVisible(false);
                    System.out.println("added to SystemTray");
                } catch (AWTException ex) {
                    System.out.println("unable to add to tray");
                }
            }
            if (e.getNewState() == 7) {
                try {
                    tray.add(trayIcon);
                    setVisible(false);
                    System.out.println("added to SystemTray");
                } catch (AWTException ex) {
                    System.out.println("unable to add to system tray");
                }
            }
            if (e.getNewState() == MAXIMIZED_BOTH) {
                tray.remove(trayIcon);
                setVisible(true);
                System.out.println("Tray icon removed");
            }
            if (e.getNewState() == NORMAL) {
                tray.remove(trayIcon);
                setVisible(true);
                System.out.println("Tray icon removed1");
            }
        }
    });
    setIconImage(Toolkit.getDefaultToolkit().getImage("bulb.png"));
    setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("bulb.png")));
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
您的代码包含“打开”选项,添加了ActionListener:

    defaultItem = new MenuItem("Open");
    defaultItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        setVisible(true);
        setExtendedState(JFrame.NORMAL);
    }

因此,您只需调用
setVisible(true)也许还有第二行

您需要执行可视操作。如以下示例所示:

int state = getExtendedState();
state = state & ~Frame.ICONIFIED;
setExtendedState(state);
setVisible(true);
第一行检索当前状态,即位掩码。然后将图标化(最小化)部分设置为false,然后再次设置相同的状态。通过这种方式,如果程序在再次最大化之前被最大化,那么当然,必须跟随setVisible(true)再次显示窗口