如何消除Windows环境下javaswing运行中的黑滞区

如何消除Windows环境下javaswing运行中的黑滞区,java,swing,Java,Swing,我编写的每个Swing应用程序都有一个常见问题:调整窗口大小时会出现黑色区域,即使是下面最简单的代码: import javax.swing.*; 公共类SampleWindow扩展JFrame{ 公共静态void main(字符串[]args){ SampleWindow SampleWindow=新的SampleWindow(); setTitle(“示例窗口”); JPanel contentPane=新的JPanel(); setLayout(新的BorderLayout()); con

我编写的每个Swing应用程序都有一个常见问题:调整窗口大小时会出现黑色区域,即使是下面最简单的代码:

import javax.swing.*;
公共类SampleWindow扩展JFrame{
公共静态void main(字符串[]args){
SampleWindow SampleWindow=新的SampleWindow();
setTitle(“示例窗口”);
JPanel contentPane=新的JPanel();
setLayout(新的BorderLayout());
contentPane.add(新JLabel(
System.getProperty(“os.name”)+“Java”+System.getProperty(“Java.version”)
),BorderLayout.CENTER);
setContentPane(contentPane);
sampleWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
采样窗口设置大小(400200);
sampleWindow.setVisible(true);
}
}

让我们看看JavaFX的作用:

有没有办法消除这种情况


我尝试添加一个组件侦听器,并在事件发生时打印:

sampleWindow.addComponentListener(新的ComponentAdapter(){
@凌驾
公共无效组件已恢复(组件事件e){
System.out.println(“调整事件大小:+System.currentTimeMillis());
}
});
我得到了这些输出:

Resizing event: 1614328759426
Resizing event: 1614328759524    // huge delay
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759526
Resizing event: 1614328759526
很明显,第一条线和第二条线之间存在巨大的延迟。我认为尝试处理调整大小的事件是不需要努力的


我发现IntelliJ也有类似的问题,所以我放弃:(


我不知道如何制作动画,但我没有用这段代码体验到黑色区域

我的要点是始终通过调用
SwingUtilities
invokeLater
方法来启动Swing应用程序。此方法确保在上创建和执行Swing组件

这是我运行的代码

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SampleWindow implements Runnable {
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SampleWindow());
    }
    
    private String properties;
    
    public SampleWindow() {
        this.properties = System.getProperty("os.name") + " Java " + 
                System.getProperty("java.version");
    }

    @Override
    public void run() {
        JFrame sampleWindow = new JFrame();
        sampleWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        sampleWindow.setTitle("Sample Window");
        
        JLabel label = new JLabel(properties);
        label.setHorizontalAlignment(JLabel.CENTER);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(label, BorderLayout.CENTER);

        sampleWindow.add(contentPane, BorderLayout.CENTER);
        sampleWindow.setSize(400, 200);
        sampleWindow.setVisible(true);
    }
    
}

@Abra Java版本与此无关,我更新了问题。@matt我更新了问题,但它不起作用。还有一件事需要尝试,这不是一个实际的解决方案,但它可能会让您检查。设置一个频繁请求重新绘制的swing计时器。频率可能甚至为1ms。否则,会有一些命令行参数影响swing如何执行painting。我没有在我的两台不同的机器上看到这种效果,可能这与你的硬件有关。我有两台不同的机器。旧的一台有Intel i5第6代,即使有任何窗口也会显示此问题。相反,新的一台有Intel i5第10代,没有显示类似的问题。因此我同意@dpr的意见,我会尽快检查你的解决方案,谢谢,而且,我正在使用屏幕录音。这是一个神奇的工具!如果你快速而远地拖动鼠标,你可能会在一瞬间看到一个小的黑色区域。这就是我所经历的。不,它不起作用。![()