По моим наблюдениям, я обнаружил, что привилегия AlwaysOnTop предоставляется самому последнему процессу, который требует, чтобы он всегда был наверху.
Итак, если у вас есть приложение, которое, setAlwaysOnTop(true)
а затем другое приложение использует эту опцию, привилегия предоставляется второму приложению. Чтобы обойти это, я установил setAlwaysOnTop(false)
и снова setAlwaysOnTop(true)
всякий раз, когда какое-либо окно появляется поверх текущего окна.
Я проверил это с помощью wordweb
in windows
. WordWeb - одно из приложений, использующих AlwaysOnTop
опцию изOS
Я не уверен, правильно ли это работает с вашим игровым сценарием.
Предупреждение : я не знаю о побочных эффектах.
Вот пример кода:
import java.awt.event.*;
import javax.swing.*;
public class MainWindow extends JFrame implements WindowFocusListener
{
public MainWindow()
{
addWindowFocusListener(this);
setAlwaysOnTop(true);
this.setFocusable(true);
panel = new JPanel();
setUndecorated(true);
setLocation(X,Y);
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
}
public void windowGainedFocus(WindowEvent e){}
public void windowLostFocus(WindowEvent e)
{
if(e.getNewState()!=e.WINDOW_CLOSED){
setAlwaysOnTop(false);
setAlwaysOnTop(true);
System.out.println("focus lost");
}
}
private JPanel panel;
private static final int WIDTH = 200;
private static final int HEIGHT = 200;
private static final int X = 100;
private static final int Y = 100;
public static void main(String args[]){
new MainWindow();}
}