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

识别摆动EDT

洪逸清
2023-03-14
问题内容

如何知道EDT被阻塞(不是视觉上而是通过检查线程本身)?有办法吗?

我正要去完成大学的最后一项毕业任务,该任务有很多图表,但是对Swing EDT(一般来说是Java)了解很少。

看一下这块:

 SwingUtilities.invokeLater(new Runnable() {
         public void run() {
             //  task here
         }
    });

如果我们执行一些修改块上gui组件的任务(包括调用另一个Thread),那已经是正确的方法了吗?

而且由于EDT是单线程环境,除了Thread.start()直接在GUI内部调用之外,还有其他(至少)一个阻止EDT的部分/示例。我应该调用哪种方法来识别已EDT被阻止

在我问这个问题之前,我已经阅读了一些文档(但是失败之后,我无法通过简单的解释向我说明如何防止阻塞EDT。)

提前致谢


问题答案:

除了被阻止外Thread.sleep(),EDT还可以例如在等待异步操作时被阻止。

这是一个示例,在按下“
Click&Wait”按钮之后,将阻止EDT,直到主线程可以从控制台读取文本为止。您会注意到在输入文本之前,按钮一直处于按下状态。然后,EDT恢复并更新标签:

CompletableFuture<String> future = new CompletableFuture<>();

SwingUtilities.invokeLater(() -> {
    JFrame f = new JFrame("EDT Blocking Example");
    f.setSize(200, 200);
    JLabel label = new JLabel();
    JButton button = new JButton("Click & Wait");
    button.addActionListener(l -> {
        try {
            // calling get() will block the EDT here...
            String text = future.get();
            label.setText(text);
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
    JPanel content = new JPanel();
    content.add(button);
    content.add(label);
    f.setContentPane(content);
    f.setVisible(true);
});
System.out.print("Enter some text: ");
String input = new Scanner(System.in).nextLine();

future.complete(input);

至于知道何时阻止EDT:这很棘手,但是探查器或线程转储可以帮助分析同步问题。



 类似资料:
  • 在最近的Google Play服务更新中,有人对活动识别API有问题吗? 我已经在一个应用程序中实现了它。在5.0更新之前,它工作得非常好。现在,当用户走路或坐着不动时,它会在车内返回:/ 并且根本不返回、或。 我应该知道的活动识别API是否有任何更改? 如果你需要更多的细节,请告诉我。

  • 我正在制作一个应用程序,使用ActivityRecognition API跟踪用户在后台的活动,如果用户在指定的时间段(例如1小时)内保持在同一位置,则系统会推送通知,告诉用户散步。我已经实现了活动识别,但仅适用于打开应用程序的情况。显然,Google API客户端需要保持连接才能发送活动更新。我的问题是-对于后台活动跟踪,什么是更好的解决方案: 1)在主活动(或单独活动)中实现警报管理器,该活动

  • 问题内容: 我创建了一个简单的 CollapsingToolbarLayout ,它的工作原理很像。我的问题是,如果我尝试在 nestedscrollview 上使用 浮动 滚动,则在松开手指时它会停止。正常的滚动工作应该像它应该的那样。 我的活动代码未 更改= >自动生成的空活动。(我只是单击了在android studio中创建新的空活动并编辑了XML)。 我在这里读到,imageview上的

  • 我正在开发android原生应用程序。我的要求是获取设备的当前活动,如运行,in_vehicle,静止等等。我使用Activity识别API并设置了通过IntentService接收活动更改的挂起意图。我给每个更新5秒的间隔。它未能在某段时间内提供活动更改并再次开始提供活动。之后我更喜欢Awareness SnapshotAPI来获取活动状态。它也是同样的结果,未能定期提供活动。两个API有时提供

  • 我将使用google play services活动识别api编写一个应用程序。android开发者网站上的培训是直接进行的,但在过去的几个小时里,我编写了一个简单的应用程序,但没有得到任何结果。更新:实际上,我将在5秒钟的时间间隔内以toast消息的形式显示用户的当前活动(如ActivityRecognitionService-Intent服务中的OnIntentHandler方法所示)。我认为

  • 问题内容: 我正在尝试创建一些用于特定目的的特殊组件,在该组件上我需要绘制HTML字符串,这是示例代码: 不幸的是,drawString方法似乎无法识别HTML格式,它愚蠢地按原样绘制字符串。 有什么办法可以使这项工作吗? 问题答案: 我找到了一种简洁的模拟方法; 这是代码: 感谢每个人的帮助,我非常感谢。