public class Main
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
//JFrame dummy for JDialog errors
modal = new JFrame();
new PrimaryErrorDialog("Title", "Message", e, false);
JFrame masterWindow = new JFrame();
masterWindow.setVisible();
}
}
}
}
它创建PrimaryErrorDialog类:
private JDialog dialog = this;
private JTextArea text;
private JPanel buttonContainer;
private JButton sendErrorReportT, sendErrorReportF;
public PrimaryErrorDialog(String title, String message,
final Exception error, final boolean exit)
{
super(Main.modal, title, true);
//JButton for sending error report
sendErrorReportT = new JButton("Send Error Report");
sendErrorReportT.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
dialog.dispose();
dialog = new JDialog(Main.modal, "Sending...", true);
Worker thread = new Worker(error);
thread.start();
JProgressBar progress = new JProgressBar();
progress.setIndeterminate(true);
dialog.add(progress);
dialog.pack();
dialog.setVisible(true);
}
});
//JButton for not sending error report
sendErrorReportF = new JButton("Don't send error report");
sendErrorReportF.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
dialog.dispose();
if (exit)
{
System.exit(0);
}
}
});
buttonContainer = new JPanel();
buttonContainer.add(sendErrorReportT);
buttonContainer.add(sendErrorReportF);
add(text);
add(buttonContainer);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public void cleanUpAndContinue()
{
dialog.dispose();
dialog = new JDialog(Main.modal, "title", true);
dialog.add(/*Jbutton with listener that disposes this dialog*/)
dialog.setVisible(true);
}
它调用扩展Thread的工作类:
public class Worker extends Thread
{
Exception e;
public Worker(Exception error)
{
e = error;
}
@Override
public void run()
{
//do something that takes time
PrimaryErrorDialog.cleanUpAndContinue();
}
它返回到PrimaryErrorDialog,然后必须通知用户任务已完成,然后终止该对话框。
这段代码稍后也会在程序中执行,对于“真正的”运行时错误,有些类只是有一点不同的参数和/或构造函数。
然而,这不起作用,我已经尝试了很多方法,我尝试了SwingWorker,似乎没有什么能达到我想要的效果。通常连电子邮件代码都达不到,或者程序不等待对话框被处理...
那我想要什么?
注意:一个错误可能发生在任何类中,它不是从Main仅...
我还没看过你之前的问题,不过...
您遇到的基本问题是需要通知对话框(在EDT中)后台线程已经完成(如果可能的话,还需要向用户提供反馈)。
这在Swing中的并发性课程中有介绍。
public class TestSwingWorker {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
final JDialog dialog = new JDialog((Frame)null, "Happy, Happy, Joy, Joy", true);
// This is so I can get my demo to work, you won't need it...
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(new EmptyBorder(8, 8, 8, 8));
dialog.setContentPane(panel);
// You'll need you own icon...
JLabel lblIcon = new JLabel(new ImageIcon(getClass().getResource("/waiting-64.png")));
JLabel lblMessage = new JLabel("<html>Hard and work here<br>Please wait...</html>");
final JProgressBar progressBar = new JProgressBar();
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.NORTH;
gbc.weighty = 1;
gbc.insets = new Insets(2, 2, 2, 2);
gbc.gridheight = GridBagConstraints.REMAINDER;
dialog.add(lblIcon, gbc);
gbc.gridheight = 1;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.weighty = 0;
gbc.weightx = 1;
dialog.add(lblMessage, gbc);
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.NORTH;
gbc.weighty = 1;
dialog.add(progressBar, gbc);
dialog.pack();
dialog.setLocationRelativeTo(null);
MyWorker worker = new MyWorker();
// Get notification back from the worker...
worker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
MyWorker worker = (MyWorker) evt.getSource();
// Progress has been updated
if (evt.getPropertyName().equalsIgnoreCase("progress")) {
progressBar.setValue((Integer)evt.getNewValue());
// The state of the worker has changed...
} else if (evt.getPropertyName().equalsIgnoreCase("state")) {
if (worker.getState().equals(SwingWorker.StateValue.DONE)) {
dialog.dispose();
}
}
}
});
worker.execute();
dialog.setVisible(true);
}
});
}
protected static class MyWorker extends SwingWorker<Object, Object> {
@Override
protected Object doInBackground() throws Exception {
// My long running task...
for (int index = 0; index < 100; index++) {
// Change this to make it faster or slower...
Thread.sleep(250);
setProgress(index);
}
return null;
}
}
}
我先用代码。我正在尝试在Asp中实现多对多关系。具有的net core。净额6。 我的订单型号: 我的产品型号: 当我尝试更新数据库时,出现以下错误:
问题内容: 我有一个线程,每隔六秒钟将GPS坐标发送到数据库,并且有一个检查可以验证用户是否在定义的区域内。如果用户不在该位置内,则我需要一个警报对话框,通知他们它们不在范围内;如果用户在该区域内,我想要一个对话框,告诉他们它们在范围内。我的检查工作正常,但是我已经尝试过了,而且我很确定我不能在后台线程上添加对话框。我已经读过一些有关使用处理程序的信息,但是我不确定如何实现。如果您有任何建议,我将
我正在尝试创建一个框,其中包含标题、正文(消息)、确定选项。 我如何将它们逐行分开(我的意思是由三部分的行分开)? 这是我正在使用的代码:
本文向大家介绍Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码,包括了Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码的使用技巧和注意事项,需要的朋友参考一下 Android中可以创建三种对话框、确定取消对话框、单选对话框、多选对话框 android中的确定取消对话框演示示例 Android中使用单选对话框的演示案例 android中使用多选
我正在学习Java的易失性,我的代码是这样的。 我知道如果flag没有volatile,线程就不会存在。这是能见度的问题。 但是,如果我在while循环中编写一些代码,如,t1线程将读取新值并停止循环。 我知道如何使用volatile来解决可见性问题,所以我的问题是: 为什么当我写?
问题内容: 我正在Android中编写一个活动,用户可以在其中修改SQL数据库。用户界面由一个EditText(用户在其中输入名称)和一个Seekbar(用户在其中输入用户的吸引力)组成。在下面有很多按钮:添加,编辑,查看,删除。 当用户单击“编辑”按钮时,将显示一个输入对话框,要求用户输入记录号。完成后,将加载该记录。 我遇到的问题是,将显示输入对话框,并且当用户输入记录号时,其余的编辑方法将继