我正在尝试编写一个简单的方法来切换我的窗口是否被最小化(即图标化).我的行为很奇怪.下面是说明问题的可运行代码.
我在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
Run Code Online (Sandbox Code Playgroud)
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
...
Run Code Online (Sandbox Code Playgroud)
这是可运行的代码:
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 ();
}
}
Run Code Online (Sandbox Code Playgroud)
看来你的程序中有一个拼写错误,你应该有一个 stage.isIconified(),但你有 2 个 stage.isIconified()
public void toggleMinimized() {
System.out.println ( "Before call" );
System.out.println ( "\tisIconified(): " + stage.isIconified() );
System.out.println ( "\tisMaximized(): " + stage.isIconified() );
Run Code Online (Sandbox Code Playgroud)
它应该是
public void toggleMinimized() {
System.out.println ( "Before call" );
System.out.println ( "\tisIconified(): " + stage.isIconified() );
System.out.println ( "\tisMaximized(): " + stage.isMaximized() );
Run Code Online (Sandbox Code Playgroud)