java swingworker_Java中的SwingWorker

L&F物质的输出(因为您对EDT的不确定性有待测试)

run:

JButton openDialog >>> Is there EDT ??? == true

Worker started >>> Is there EDT ??? == false

waiting 30seconds

Worker endeded >>> Is there EDT ??? == false

before JOptionPane >>> Is there EDT ??? == false

org.pushingpixels.substance.api.UiThreadingViolationException:

Component creation must be done on Event Dispatch Thread

和另外200行有关详细信息

输出是 "correct container created out of EDT"

我将在另一家L&F上进行测试,Nimbus可能存在问题,SystemLokkAndFeel在大多数情况下并不关心EDT上的重大错误(对EDT的敏感性完全不同),默认情况下,Metal在Windows平台上没有任何问题,对于Java6,那么您的示例也可以在第二基础上使用

从代码

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import javax.swing.plaf.FontUIResource;

public class Test {

public static void main(String[] args) throws Exception {

try {

for (UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

UIManager.setLookAndFeel(info.getClassName());

UIManager.getLookAndFeelDefaults().put("nimbusOrange", (new Color(127, 255, 191)));

break;

}

}

} catch (ClassNotFoundException ex) {

} catch (InstantiationException ex) {

} catch (IllegalAccessException ex) {

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

}

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

/*try {

UIManager.setLookAndFeel(

"org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel");

UIManager.getDefaults().put("Button.font", new FontUIResource(new Font("SansSerif", Font.BOLD, 24)));

UIManager.put("ComboBox.foreground", Color.green);

} catch (Exception e) {

}*/

new Test().createAndShowUI();

}

});

}

private void createAndShowUI() {

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

initComponents(frame);

frame.setPreferredSize(new Dimension(300, 300));//testing purposes

frame.pack();

frame.setVisible(true);

}

private void initComponents(final JFrame frame) {

final JDialog emailDialog = new JDialog(frame);

emailDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

emailDialog.setLayout(new BorderLayout());

JButton sendMailBtn = new JButton("Send Email");

sendMailBtn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//get content needed for email from old dialog

//get rid of old dialog

emailDialog.dispose();

//create new dialog

final JDialog emailProgressDialog = new JDialog(frame);

emailProgressDialog.add(new JLabel("Mail in progress"));

emailProgressDialog.pack();

emailProgressDialog.setVisible(true);

new Worker(emailProgressDialog, frame).execute();

}

});

emailDialog.add(sendMailBtn, BorderLayout.SOUTH);

emailDialog.pack();

JButton openDialog = new JButton("Open emailDialog");

openDialog.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("JButton openDialog >>> Is there EDT ??? == " + SwingUtilities.isEventDispatchThread());

emailDialog.setVisible(true);

}

});

frame.getContentPane().add(openDialog);

}

}

class Worker extends SwingWorker {

private final JDialog dialog;

private final JFrame frame;

Worker(JDialog dialog, JFrame frame) {

this.dialog = dialog;

this.frame = frame;

}

@Override

protected String doInBackground() throws Exception {

System.out.println("Worker started >>> Is there EDT ??? == " + SwingUtilities.isEventDispatchThread());

System.out.println("waiting 30seconds ");

Thread.sleep(30000);//simulate email sending

System.out.println("Worker endeded >>> Is there EDT ??? == " + SwingUtilities.isEventDispatchThread());

dialog.dispose();

System.out.println("before JOptionPane >>> Is there EDT ??? == " + SwingUtilities.isEventDispatchThread());

JOptionPane.showMessageDialog(frame, "Message sent", "Success", JOptionPane.INFORMATION_MESSAGE);

System.out.println("before JOptionPane >>> Is there EDT ??? == " + SwingUtilities.isEventDispatchThread());

return null;

}

}

分享编辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

持续交付与滚动升级

介绍 持续交付是频繁对软件应用程序持续更新的概念. 这个想法使在大量频繁的更新面前, 你不必等待在一个指定的特殊时间点, 并且使你的组织在响应过程中变得更好. 一些 Ansible 用户每小时都在部署更新给他们的最终用户甚至更加频繁 – 每时每刻都有代码修改的批准. 要实现这一…

2-05 使用固态存储SSD或PCIe卡

在大量并发的情况下,才能体现固态磁盘的吞吐量,在大并发下提供良好随机io的性能,这正是关系型数据库所需要的,相对应机械磁盘,固态磁盘更容易损坏(第三点是固态磁盘的缺点),由于固态…

面试问题汇总 精选 分析 解答 职业规划 part 3

《剑指Offer——名企面试官精讲典型编程题》已经出版 非常感谢博客上的读者,是大家的关心、支持和鼓励让我有信心写完这本书并最终出版发行( china-pub互动网、 亚马逊卓越网、 淘宝网、 京东网、 当当网上有售)。网友们的鼓励让我在 博客上的…

java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)

4 Dubbo快速入门Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。4.1 服务提供方开发开发步骤…

轻松获知数据库事务

标题索引事务作用事务流程隔离级别实例验证事务作用事务是确保数据库系统数据的完整性的功能,如现在互联网行业支付业务,不管服务器出于什么原因异常中断,客户要么支付成功要么支付不成功,支付成功数据库金额即会发生变化&#xf…

Python冒泡排序(4)

Python代码: """ 冒泡排序(4)在未排序的数中,通过两两比较[换位]的方式,将最小的数移至首位 N个数排序,则需要执行N-1轮,第1轮比较N-1次,后续每轮比上一轮少比较1次本…

打印hello world java_java – 如何打印“hello world”?

数字4946144450195624适合64位,其二进制表示为:10001100100100111110111111110111101100011000010101000该程序对每5位组的字符进行解码,从右到左00100|01100|10010|01111|10111|11111|01111|01100|01100|00101|01000d | l | r | o | w | | o…

研发人员为什么留不住

研发人员为什么留不住?(1)——问题与现象 研发团队做为公司的核心,承担了完成项目为公司赚钱的目的。研发人员在公司倍受重视的同时,并没有降低流失率。 问题与现象 以下问题相信您会在朋友口中,甚至自己的公司听到。 老板说&a…

算法与编程--1

1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 package com.test;import java.io.File; import java.io.FileNotFoundException; import …

Safari支不支持HTML5录音? 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。...

先放结论:Safari支不支持HTML5录音? ——据我调查,不支持。 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。 可是当使用Can I use查看兼容性的时候,我发现 不过这个是有历史原因的,我记得RTC是…

python lambda map reduce_简单了解python filter、map、reduce的区别

这篇文章主要介绍了简单了解python filter、map、reduce的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下python中有一些非常有趣的函数,面试的时候可能会遇到。今天也来总结一下,不…

面试问题汇总 精选 分析 解答 职业规划 part 4

程序员做业余项目、记笔记和写博客的重要性【经典】 编程是一种创造过程,业余项目允许程序员在没有截止日期或各种限制的条件下,以探索形式编程。业余项目之所以重要,有以下几个原因。 探索新技术 每天都会不断有新技术出现,而…

NB-IOT连接移动onenet平台流程

1. 先创建账号,然后创建产品 2. 创建设备,用ATCGSN和ATCIMI查询NB-IOT的IMEI和IMSI填写上去。 3. 创建好的设备。 转载于:https://www.cnblogs.com/429512065qhq/p/8359247.html

sort,uniq,wc指令简单用法

sort用于排序,可以根据不同的数据类型来进行排序,例如想要查看最后一个登陆的用户信息,可以把last和sort结合起来使用,按照登陆时间排序。 使用sort排序: sort常用参数: -f :忽略大小写的差异 -…

java ejb jsp 架构_JavaEE架构

B/S 体系结构image.pngJava EE 经典架构image.pngJava EE 13规范JDBCimage.pngJDBC 对象与接口java.sql.DriverManager:用于管理JDBC驱动的服务类,当JDBC驱动加载至内存后,DriverManager会自动注册JDBC驱动,然后通过getConnection…

音视频中的CBR,VBR,ABR

视频码率CBR和VBR 固定码率(CBR)与可变码率(VBR) 一般在我们输出视频文件的时候都会碰到一个选择即CBR与VBR,CBR的英文全称是Constant Bit Rate翻译过来是固定码率,就是说每一秒种的画面如果看做是一个…

fifo java_java – 如何保证ThreadPoolExecutor中的FIFO执行顺序

我用这行代码创建一个ThreadPoolExecutor:private ExecutorService executor new ThreadPoolExecutor(5, 10, 120, TimeUnit.SECONDS, new ArrayBlockingQueue(20, true));然后,我运行25个任务(T01到T25),所以情况是:>目前正在运行的5个任务(T01到T0…

HihoCoder 1671 DFS

本以为是个简单的水题,好吧,其实就是个水题,虽然我还是…… 题意的理解上有一点小小的问题orz,这里的括号里的字母是可以看成一个整体的,可以看作一个字母来进行反转, 比如说,(abc(de))&#xf…

avs 中国音视频标准DRA 中音频标准及应用

DRA 是Digital Rise Audio的缩写。是广州广晟数码技术有限公司(Digital Rise Technology)开发的一项数字音频编码技术,目前是音频编码的国家标准。2007年1月被批准成为中国电子行业标准(标准号SJ/T11368-2006)。DRA音频标准可应用…

UWP数据绑定

已针对 Windows 10 上的 UWP 应用更新。 有关 Windows 8.x 文章,请参阅存档 ] 数据绑定是你的应用 UI 用来显示数据的一种方法,可以选择与该数据保持同步。 借助数据绑定,你可以将关注的数据从关注的 UI 中分离开来,从而可形成一个…