您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

识别摆动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:这很棘手,但是探查器或线程转储可以帮助分析同步问题。

其他 2022/1/1 18:37:47 有451人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶