我正在尝试编写一个简单的方法来切换我的窗口是否被最小化(即图标化)。我的行为很奇怪。下面是说明问题的可运行代码。
我在Gnome 3.20.4和XFCE 4.12上获得了相同的结果。我还没有在任何其他环境中对此进行测试。
<--
)放在文本输出与视觉输出不匹配的行旁边。 Windows未最大化行为
Before call (Note: Window appears iconified)
isIconified(): true
isMaximized(): true
Setting iconified to false
After call (Note: Window now appears restored, not maximized)
isIconified(): true <-- The window is visually not iconified
isMaximized(): true <-- The window is visually not maximized
Before call (Note: Window still appears restored, not maximized)
isIconified(): false <-- One second later, the report is accurate
isMaximized(): false
Setting iconified to true
After call (Note: Window now appears iconified)
isIconified(): true
isMaximized(): true
Windows最大化行为
Before call (Note: Window appears iconified)
isIconified(): true
isMaximized(): true
Setting iconified to false
After call (Note: Window appears maximized)
isIconified(): true <-- Does not match visual
isMaximized(): true
Before call (Note: Window appears maximized)
isIconified(): true <-- Does not match visual
isMaximized(): true
Setting iconified to false
After call (Note: Window appears maximized)
isIconified(): false
isMaximized(): false <-- Does not match visual
Before call (Note: Window appears maximized)
isIconified(): false
isMaximized(): false <-- Does not match visual
Setting iconified to true
After call (Note: Window appears iconified)
isIconified(): true
isMaximized(): true
<Now it loops>
Before call (Note: Window appears iconified)
isIconified(): true
isMaximized(): true
Setting iconified to false
After call (Note: Window appears maximized)
isIconified(): true <-- Does not match visual
isMaximized(): true
...
这是可运行的代码:
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
public class StageTest extends Application {
Stage stage;
public static void main ( String[] args ) {
launch ( args );
}
@Override
public void start ( Stage stage ) throws Exception {
this.stage = stage;
stage.setResizable( true );
stage.show( );
Thread thread = new Thread ( () -> {
while ( true ) {
Platform.runLater( () -> {
toggleMinimized();
} );
try {
Thread.sleep ( 1000 );
} catch ( InterruptedException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread.setDaemon( true );
thread.start();
}
public void toggleMinimized() {
System.out.println ( "Before call" );
System.out.println ( "\tisIconified(): " + stage.isIconified() );
System.out.println ( "\tisMaximized(): " + stage.isIconified() );
System.out.println ();
if ( stage.isIconified() ) {
System.out.println ( "Setting iconified to false" );
System.out.println ();
stage.setIconified( false );
} else {
System.out.println ( "Setting iconified to true" );
System.out.println ();
stage.setIconified( true );
}
System.out.println ( "After call" );
System.out.println ( "\tisIconified(): " + stage.isIconified() );
System.out.println ( "\tisMaximized(): " + stage.isMaximized() );
System.out.println ();
System.out.println ();
}
}
答案 0 :(得分:0)
你的程序中有一个错字,你有2个stage.isIconified(),你应该有一个
public void toggleMinimized() {
System.out.println ( "Before call" );
System.out.println ( "\tisIconified(): " + stage.isIconified() );
System.out.println ( "\tisMaximized(): " + stage.isIconified() );
应该是
public void toggleMinimized() {
System.out.println ( "Before call" );
System.out.println ( "\tisIconified(): " + stage.isIconified() );
System.out.println ( "\tisMaximized(): " + stage.isMaximized() );