相关疑难解决方法(0)

如果显示器关闭,AWT/Swing是否取消绘画操作?

我遇到Swing问题,只有在计算机显示器电源关闭时才会出现,但我的Swing应用程序继续在后台运行.看起来每当显示器关闭时,Swing/AWT都会取消所有绘画操作,导致GUI中的一些显示问题在显示器重新打开后立即可见.

例如,当我使用自定义JNI函数关闭监视器并随后打开一个简单的消息对话框时,当监视器重新打开时,消息对话框为空:

空白消息对话框

但它在下次重绘后正确绘制:

正确绘制消息对话框

这是Swing的预期行为吗?有没有办法指示Swing即使显示器电源关闭也能继续绘制到屏幕上?

编辑:这是一个SSCCE:

package test;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class App {
    public static void main(String[] args) throws Throwable {
        System.out.println("***** Please turn off the monitor in the next 70 seconds *****");
        Thread.sleep(1000L * 70);

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JOptionPane.showMessageDialog(null, "Test");
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用的是64位Windows 7 Home Premium SP1和64位Java 1.6.0_24.

编辑2:这是另一个我体验"取消绘画操作"效果的程序:

package test;

import static com.mycompany.Util.turnOffMonitors;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel; …
Run Code Online (Sandbox Code Playgroud)

java swing awt repaint

11
推荐指数
1
解决办法
534
查看次数

基本Java Swing,如何退出和处理您的应用程序/ JFrame

使用这样的代码处理JFrame的好方法是什么?我想处理Window出口和窗口关闭.

我知道我们不应该使用System.exit();

public class JavaCellularAutomataSquare {

  public static final String TITLE = "Cellular Automata - Squaring Example";

  private int maxWidth = 600;
  private int maxHeight = 600;

  public void launch() {    
    final JFrame frame = new JFrame(TITLE);   
    frame.setLocation(20, 20);    
    frame.setPreferredSize(new Dimension(maxWidth, maxHeight));
    frame.setResizable(false);
    frame.setFocusable(true);

    final JPanel panel = new JPanel();
    panel.setLocation(20, 20);
    panel.setVisible(true);
    panel.setPreferredSize(new Dimension(maxWidth, maxHeight));    
    panel.setFocusable(true);
    panel.setBackground(Color.white);

    // Panel setup, toggle visibility on frame
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);    
  }

}
Run Code Online (Sandbox Code Playgroud)

java swing windowlistener

10
推荐指数
2
解决办法
3万
查看次数

带有WindowListener的JDialog - 未触发windowClosing

我有一个扩展JDialog的类,它有一个窗口监听器:

class MyClass extends JDialog {

     public MyClass() {
         setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE );
         addWindowListener( new WindowAdapter() {

                @Override
                public void windowClosing(WindowEvent e) {
                    System.out.println("closing...");
                    //do something...
                }

            });
     }

}
Run Code Online (Sandbox Code Playgroud)

当我点击X按钮时,没有任何反应.我没有看到"关闭......"的印刷品

我错过了什么?

java swing jdialog windowlistener

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×3

swing ×3

windowlistener ×2

awt ×1

jdialog ×1

repaint ×1