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.pswp.cn/news/453600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453600.shtml
英文地址,請注明出處:http://en.pswp.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 中分離開來,從而可形成一個…