我正在使用银行gui应用程序,目前正在使用它,我的jdialog的setvisible方法似乎存在问题。用户提取有效金额后,我弹出一个简单的对话框,显示“交易正在进行中”。在我的dobackground方法中,我不断轮询以检查是否已收到交易。我尝试使用swingworker,但我不明白为什么它不起作用。如果我删除setvisible调用,它可以正常工作,那么为什么setvisible导致系统挂起?这是我的jbutton
mouselistener内部的代码:
SwingWorker<String,Integer> worker = new SwingWorker<String,Integer>(){
JDialog waitForTrans = new JDialog((JFrame)null,true);
public String doInBackground() throws Exception {
waitForTrans.add(new JLabel("Updating balance in system. Please Wait..."));
waitForTrans.setMinimumSize(new Dimension(300,100));
waitForTrans.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
waitForTrans.setVisible(true);
Bank.getInstance().sendTransaction(currentPin,"-"+withdraw);
while(!Bank.getInstance().hasCompletedTransaction){
}
return null;
}
public void done(){
try {
this.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
waitForTrans.setVisible(false);
newField.setText(String.valueOf(Bank.getInstance().getAccountList().get(currentPin).getBalance()));
}
};
worker.execute();
首先,建议在Swing Event-Dispatch线程中进行所有GUI更新,即使用SwingUtilites
类。
其次,您JDialog
是模态的,因此阻塞了setVisible(true)
调用该方法的线程(在您的情况下为Main线程,在以下情况下为Swing
Event-Dispatch Thread)。
我并不是说以下代码是完美的,但是它应该使您步入正轨。
final JDialog waitForTrans = new JDialog((JFrame) null, true);
SwingWorker worker = new SwingWorker() {
public String doInBackground() throws Exception {
Thread.sleep(5000);
return null;
}
public void done() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
waitForTrans.setVisible(false);
waitForTrans.dispose();
}
});
}
};
worker.execute();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
waitForTrans.add(new JLabel("Please Wait..."));
waitForTrans.setMinimumSize(new Dimension(300, 100));
waitForTrans.setVisible(true);
}
});
希望这可以帮助。
问题内容: 当我尝试通过发出命令“ g ++ qr.cpp -o qr”来编译此文件时,系统挂起。我在其他任何地方都没有看到这种错误。 我的编译器版本信息如下。 问题答案: 你知道这些有多大吗? 每个至少1GB !!!您将要动态分配它们…
问题内容: 我正在研究需要检测系统关闭的应用程序。但是,我没有找到任何可靠的方式来接收此事件的通知。 我知道在关机时,我的应用会收到一个信号,然后是。我想知道是否有任何方法可以查询a 是否 为关机序列的一部分 ? 有谁知道是否有一种以编程方式查询(C API)的方法吗? 据我所知,系统没有提供任何其他方法来查询即将发生的关机。如果确实如此,那也将解决我的问题。我也一直在尝试,但是更改似乎是瞬时的,
不确定是否有人遇到过这个问题。我正在使用带有EJB3.1的JBoss7.1应用程序服务器和带有HiberNate实现的JPA2.0。我正在使用后端Oracle 11g数据库。请参阅下面的代码。我正在使用由HTTP GET请求驱动的servlet调用我的EJB。 当我在下面的代码中注释掉 时,我的网页会永远挂起,一段时间后我会得到下面的堆栈跟踪(如果我调试,它会让我直到 persist() 方法,然
Momenta 系统研发工程师 一面挂 8.22 大概50min 简历上把ROS小车集群项目放在了第一个,一下子就收到了面试官在面试开始之前的口头关照(等下重点介绍一下) 一、项目介绍 大致介绍一下小车项目,负责的模块 舵机控制是闭环还是开环? 项目和论文有什么关系吗? 再简单介绍一下其他两个项目的其中一个? 二、手撕 一个ros node上的按照固定频率发布一个topic 1(整形变量),同时监
我有两个类:类jDialog和JFrame 知道如何保持jDialog运行吗?我只使用setVisible()来隐藏它,而不使用dispose();
本文向大家介绍linux通过挂载系统光盘搭建本地yum仓库的方法,包括了linux通过挂载系统光盘搭建本地yum仓库的方法的使用技巧和注意事项,需要的朋友参考一下 1.挂载光盘 /dev下的cdrom目录是事先创建好的 2.修改yum配置文件(文件位置:/etc/yum.repos.d) 保存退出 3.验证 我们使用 yum 命令加上 list 参数就可以查看仓库 以上所述是小编给大家介绍的l