Windows에는 창이 초점을 훔치는 것을 방지하는 기능이 있습니다. 대신 작업 표시 줄 아이콘이 깜박입니다. XP에서는 기본적으로 켜져 있습니다 (제가 변경 한 유일한 곳은 TweakUI를 사용하는 것이지만 어딘가에 레지스트리 설정이 있습니다). Vista에서는 기본 UI를 사용하여 기본값을 변경하거나 사용자가 액세스 할 수있는 설정으로 노출했을 수 있습니다.
윈도우 2K 이후로 윈도우가 강제로 앞쪽으로 향하는 것을 방지하고 초점을 맞추는 기능은 Windows 2K 이후의 기능입니다.
즉, 작업하는 동안 내 활동을 기록하도록 상기시키는 데 사용하는 작은 Java 앱이 있으며 30 분마다 활성 창 (물론 구성 가능)이됩니다. Windows XP에서 항상 일관되게 작동하며 제목 표시 줄 창을 깜박이지 않습니다. 타이머 이벤트 발생의 결과로 UI 스레드에서 호출되는 다음 코드를 사용합니다.
if(getState()!=Frame.NORMAL) { setState(Frame.NORMAL); }
toFront();
repaint();
(최소화하면 첫 번째 줄이 복원됩니다 ... 실제로 최대화하면 복원되지만 결코 그렇지 않습니다).
일반적으로이 앱은 최소화되어 있지만 텍스트 편집기 뒤에있는 경우가 많습니다. 그리고 제가 말했듯이 항상 작동합니다.
나는 당신의 문제가 무엇인지에 대한 아이디어를 가지고 있습니다-아마도 당신은 setVisible () 호출과 경쟁 조건이 있습니다. 창이 호출 될 때 실제로 표시되지 않는 한 toFront ()는 유효하지 않을 수 있습니다. 이전에 requestFocus () 에이 문제가 발생했습니다. 창 활성화 이벤트의 UI 리스너에 toFront () 호출을 넣어야 할 수도 있습니다.
2014-09-07 : 어느 시점에서 위의 코드가 Java 6 또는 7에서 작동을 멈췄습니다. 조사와 실험을 한 후 코드를 업데이트하여 창의 toFront
메서드 를 재정의 해야했습니다 (수정 된 코드와 함께 위) :
setVisible(true);
toFront();
requestFocus();
repaint();
...
public @Override void toFront() {
int sta = super.getExtendedState() & ~JFrame.ICONIFIED & JFrame.NORMAL;
super.setExtendedState(sta);
super.setAlwaysOnTop(true);
super.toFront();
super.requestFocus();
super.setAlwaysOnTop(false);
}
Java 8_20부터이 코드는 제대로 작동하는 것 같습니다.