当前位置: 首页 > 面试题库 >

在秋千上使用sleep()

岑畅
2023-03-14
问题内容
public class TestFrame extends JFrame
{
   public TestFrame()
   {

        setBounds(10, 10, 500, 500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(3);       
   }

   public static void main(String[] args) throws InterruptedException
   {
        TestFrame tf = new TestFrame();
        tf.add(new JButton("test1"));
        tf.setVisible(true);
        Thread.sleep(2000);
        tf.getContentPane().removeAll();
        tf.add(new JButton("test2"));
        System.out.print("Show test");
   }
}

我希望程序JButton("test2")在2秒后显示。
然后我在thread.sleep(2000)之后添加test1

但是我不知道为什么程序会停止显示test1 JButton,而不显示test2 JButton,并且“ show test”消息可以成功打印出来


问题答案:

简短的答案,不要。

Swing是一个单线程框架,这意味着阻止事件调度线程的任何事物都将阻止它更新UI或处理任何新事件(使您的UI看起来像是被挂起了)。

当然,您可以使用Thread,但Swing也不是线程安全的。这意味着必须在事件分发线程的上下文内对UI进行所有修改。尽管有多种方法可以克服此问题,但最简单的方法是仅使用Swing
Timer

就拿仔细看看如何使用Swing计时器和并发Swing中了解更多详情

您还应该看看Initial
Threads

在更新UI时,可能需要调用,revaldiate并且repaint在添加新组件后迫使UI更新以重新布局其内容。



 类似资料:
  • 问题内容: 我想实现一个JTreeTable。我在Java官方网站上看到了该示例。我是Java的初学者,我无法理解该示例。我将树节点和子名称作为字符串。我该如何实施? 问题答案: 有(只有我尝试过的产品) 自由 swingx NetBeans ,在此处说明 Aephyr的出色解决方法 这里的简单代码示例 非自由 积德网格

  • 我试图在macOS高Sierra上的eclipse氧气4.7.3a上使用windows Builder。它安装良好,但每次我尝试打开设计部分时,它都会显示此错误 Eclipse在0下运行,但是这个Java项目有1.8Java的合规级别,因此WindowBuilder将无法从该项目加载类。对项目使用较低级别的Java,或者使用较新的Java版本运行Eclipse。 我什么都试过了。就像改变运行环境,

  • 问题内容: 我目前正在尝试实现一个Swing组件,从该组件继承应该仅代表可以垂直定向的标签。 从此开始: 我认为仅更改来自的结果是一个好主意: 然后在我将绘画卸载到原始图像之前简单地转换对象: 似乎可以某种方式起作用,因为现在可以垂直显示文本。但是,放置和大小已关闭。 实际上,背景的宽度(在这种情况下为橙色)与周围的高度相同,这与我的想法不尽相同。 有什么想法如何以适当的方式解决这个问题吗?是否甚

  • 问题内容: 我有一个很大的swing应用程序,我想让它记住所有窗口,jframe等的大小。因此,如果用户按自己的喜好调整窗口大小,则下次窗口看起来完全一样。 我是否有更好的解决方案,但是可以在“首选项”中手动编写每个窗口的位置/大小?有什么方便的方法可以在JTable中存储列的顺序吗?可能是一些框架?只是不想写样板。 不幸的是,整个大型应用程序的序列化不是一种选择。 问题答案: 不,没有。不要忘了

  • 问题内容: 我正在使用Eclipse IDE开发桌面(秋千)应用程序。我有三个组合框(国家,州和城市),选择新的国家或省时需要自动更新数据。我搜索了很多信息,但是我发现的所有实现都是在Ajax或NetBeans中的bean绑定框架上完成的。我通过ItemEvent尝试了一种解决方案,但是在启动应用程序时遇到了问题,该应用程序加载了国家列表,但没有加载其他列表。通过选择一个国家,国家列表而不是城市列

  • 问题内容: 每当我读到Swing时,他们都会说它们是重量轻的组件。所以我只是在Google Swing上搜索,发现这意味着Swing不依赖于本地同级。这就是为什么它们被称为 “轻量级” ?我的意思是重量轻,我认为Swing组件可能比AWT组件占用更少的内存。不是吗 问题答案: Swing被认为是轻量级的,因为它是完全用Java实现的,而无需调用本机操作系统来绘制图形用户界面组件。 另一方面,AWT