Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 窗口焦点事件的意外行为_Java_Swing_Window_Focus_Awt - Fatal编程技术网

Java 窗口焦点事件的意外行为

Java 窗口焦点事件的意外行为,java,swing,window,focus,awt,Java,Swing,Window,Focus,Awt,我正在使用Swing创建一个应用程序,我遇到了一个问题。我想处理focusLost()和focusgoven()事件,但我认为我的代码有缺陷 我有以下测试代码: addWindowFocusListener(new WindowFocusListener() { @Override public void windowLostFocus(WindowEvent e) { System.out.println("Lost!"); System.out

我正在使用
Swing
创建一个应用程序,我遇到了一个问题。我想处理
focusLost()
focusgoven()
事件,但我认为我的代码有缺陷

我有以下测试代码:

addWindowFocusListener(new WindowFocusListener() {
    @Override
    public void windowLostFocus(WindowEvent e) {
        System.out.println("Lost!");
        System.out.println(e.toString());
    }

    @Override
    public void windowGainedFocus(WindowEvent e) {
        System.out.println("Gained!");
        System.out.println(e.toString());
    }
});
而且,当我激活该窗口时,该应用程序似乎可以同时处理两个事件

Gained! java.awt.event.WindowEvent[WINDOW_GAINED_FOCUS,opposite=null,oldState=0,newState=0] on frame0 Lost! java.awt.event.WindowEvent[WINDOW_LOST_FOCUS,opposite=null,oldState=0,newState=0] on frame0
嗯,我看不出你的代码有什么错;因此,我制作了一个快速演示,它似乎运行良好:

import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class WindowEventDemo extends JFrame implements WindowFocusListener {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new WindowEventDemo("Window Event Demo").setVisible(true);
            }
        });
    }

    public WindowEventDemo(String name) {
        super(name);
        addWindowFocusListener(this);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
    }

    @Override
    public void windowGainedFocus(WindowEvent e) {
        System.out.println("WindowFocusListener method called: windowGainedFocus.");
    }

    @Override
    public void windowLostFocus(WindowEvent e) {
        System.out.println("WindowFocusListener method called: windowLostFocus.");
    }
}
启动时打印:

WindowFocusListener方法名为:windowGainedFocus

当窗口最小化时,或者在屏幕上的其他地方单击鼠标时会打印
JFrame

WindowFocusListener方法名为:windowLostFocus


你能发布一个演示你的问题(即可以按原样运行的东西)吗?请发布代码。由于我对问题的政策,我给了你一张赞成票,从而取消了反对票。现在我不能。。。我给自己写了一个简单的例子,但一切都没问题。一个应用程序,我有这个问题是一个有点大的应用程序,所以我不能上传那里的代码。我认为问题可能是由jMonkeyEngine(lwjgl)画布引起的。如果我能写SSCE,我会写它…是的,我删除了jME画布,它工作正常。我会尽可能快地编写一个示例代码。听起来你在混合AWT和Swing。
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class WindowEventDemo extends JFrame implements WindowFocusListener {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new WindowEventDemo("Window Event Demo").setVisible(true);
            }
        });
    }

    public WindowEventDemo(String name) {
        super(name);
        addWindowFocusListener(this);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
    }

    @Override
    public void windowGainedFocus(WindowEvent e) {
        System.out.println("WindowFocusListener method called: windowGainedFocus.");
    }

    @Override
    public void windowLostFocus(WindowEvent e) {
        System.out.println("WindowFocusListener method called: windowLostFocus.");
    }
}