问题描述
我正在做一个小项目,在这个例子中它由 2 个类(和窗口)组成。基本上,当我单击放置在 JFrame 1 上的按钮时,它会打开一个 jdialog,然后启动处理函数,该函数执行时间很长(在示例中,我只放置了千位哈希)。然后,当处理完成时,我想关闭 jdialog(或者如果不可能,我希望程序打开一个新的 JFrame 或 jdialog,但只有在处理完成时)。有没有办法实现其中一个目标?
这是我的主类,其中包含 JFrame :
public class test2 {
private static JFrame frame;
public static void main(String[] args) {
SwingUtilities.invokelater(new Runnable() {
public void run() {
try {
frame = new JFrame("jdialog Test");
frame.setSize(650,550);
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel());
frame.setLocationByPlatform(true);
frame.setVisible(true);
} catch (Exception e) {
e.printstacktrace();
}
}
});
}
private static JPanel createMainPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(150,100,150,100));
panel.setPreferredSize(new Dimension(400,400));
JButton button = new JButton("Open jdialog");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokelater(new Dialog());
new Thread(new Runnable() {
@Override
public void run() {
Treatment();
}
}).start();
}
});
panel.add(button);
return panel;
}
public static void Treatment() {
String str = "a";
for(int i = 0; i < 4000000; i++) {
Thread.yield();
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e1) {
e1.printstacktrace();
}
md.update(str.getBytes());
byte[] digest = md.digest();
String myHash = DatatypeConverter.printHexBinary(digest).toupperCase();
if (i % 400000 == 0) {
System.out.println("Processing " + i / 400000 + "0 %");
}
}
System.out.println("Processing 100 %");
}
这是我的第二个类,其中包含 Runnable jdialog :
public class Dialog implements Runnable {
private jdialog dialog;
public Dialog() {
this.dialog = new jdialog();
}
@Override
public void run() {
this.dialog.setDefaultCloSEOperation(jdialog.disPOSE_ON_CLOSE);
this.dialog.setTitle("Veuillez patienter");
this.dialog.setSize(300,200);
this.dialog.setLocationRelativeto(null);
this.dialog.setVisible(true);
}
}
希望我解释清楚,谢谢大家!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)