Windows 8.1下JFrame在调整大小时会冻结

10

这个帖子也发布在coderanch.com上。

import javax.swing.*;

public class Tmp {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setSize(200, 200);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JTextField());
                frame.setVisible(true);
            }
        });
    }
}

关于调整这个JFrame大小的问题。

程序启动后默认情况下是这样的:

enter image description here

当我试图像下面的图片一样调整它的大小并将鼠标指针移动到屏幕顶部时,我看到了这个:

enter image description here

当我释放鼠标时,框架被调整大小但无响应。而且上面有一块黑色空间。 它是这样的:

enter image description here

这在Windows 8.1和java 1.7.0_45上发生(在Windows 7上也是如此)。 在Windows中使用其他方式调整框架大小时不会出现此问题。 只有在系统设置中激活“拖动时显示窗口内容”时才会发生此问题。 为什么会这样? 如何解决?


尝试将 frame.setVisible(true); 更改为 frame.pack(); frame.setVisible(true); - Andrew Thompson
@AndrewThompson 没有任何更改。 - Pawel P.
我是 Blue(来自其中一个 pre_releases)的用户,但我从未见过那个。 - mKorbel
Netbeans 7.4本身在Windows 7上也存在相同的问题。https://www.dropbox.com/s/6u3zwro8bjdmrc1/Ekran%20Al%C4%B1nt%C4%B1s%C4%B1.PNG?dl=0 - mussdroid
你正在使用Unity窗口管理器吗? - PsyCode
显示剩余2条评论
2个回答

4
这听起来很像这里报告的错误。据称已在JDK8和9中修复,并且根据问题跟踪器,该错误修复程序被移植到了版本7u80中。

0

我使用的是带有JDK1.7.0_25的Windows 7,您的代码对我来说运行良好。
我有三个解决方案:
1- 我认为Oracle在45的更新中出了问题,可以用25替换45
2- Java中的任何图形用户界面都使用自操作系统,可能与Java 7兼容的Windows 8还不兼容
3- 您可以添加一个框架调整大小的侦听器并在侦听器体中调用repaint(); 或设置实际尺寸的大小
此外,您可以尝试使用setUndecorated(true)和实现框架调整大小的自定义鼠标监听器。


1
我现在无法访问Win 7机器,因此无法检查这个问题。我在帧调整大小时添加了监听器并调用了repaint。没有用。更糟糕的是,在调整大小期间似乎根本没有触发监听器!(我的意思是,在鼠标释放后和框架跨越整个屏幕高度的这部分) - Pawel P.
很奇怪!! 你可以下载JDK 7 u 25并重试。 你用的是什么IDE?如何运行这段代码?在IDE中运行还是在CMD中运行? - java acm
1
我使用Intellij IDEA社区版13.0。当我通过命令行运行它时,没有任何更改。 - Pawel P.
1
不要更改jdk 7 u 25。 - Pawel P.
1
这也发生在Windows 7上。但只有当系统设置中激活了“拖动时显示窗口内容”时才会发生。 - Pawel P.
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接