Java 请稍候对话框
我在线程中显示对话框时遇到问题。这里的Sleep方法是我的代码,它不起作用Java 请稍候对话框,java,swing,Java,Swing,我在线程中显示对话框时遇到问题。这里的Sleep方法是我的代码,它不起作用 JButton btnNewButton = new JButton("New button"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JDialog loading = new LoadingDialog(); loading.set
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JDialog loading = new LoadingDialog();
loading.setVisible(true);
try {
Thread.sleep(6000);
} catch (Exception e) {
e.printStackTrace();
}
loading.dispose();
}
});
及
请帮助我解决此问题。使用自定义对话框,您正在阻止主线程-请尝试此操作
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
final JDialog loading = new LoadingDialog();
loading.setVisible(true);
btn.setEnabled(false);
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
}
loading.dispose();
btn.setEnabled(true);
}
}).start();
}
});
你最好在这个案子中使用SwingWorkder。此类允许您创建在后台模式下运行的线程。它非常适合模态框架。它不工作到底意味着什么?您会得到什么错误或异常?我注意到您在
new LoadingDialog()
之后缺少一个分号,但这可能只是一个输入错误。它没有显示加载对话框。它等待6秒,然后退出。此处缺少分号是输入错误。很抱歉。如果我用常规的JDialog
代替加载对话框运行它,它会正常工作。您是否在加载对话框
中重写了类似setVisable()
的内容?这对我也适用,但是如果我有自定义的JDialog,比如扩展JDialog,我应该如何继续。@pasupati PostLoadingDialog.java
?公共类加载对话框扩展JDialog{public LoadingDialog(){Toolkit tk=Toolkit.getDefaultToolkit();维度screenSize=tk.getScreenSize();int screenHeight=screenSize.height;int screenWidth=screenSize.width;setBounds((screenWidth-400)/2,(screenHeight-200)/235080);getContentPane().setLayout(null);SetResizeable(false);SetUndercorated(true);JLabel lblPleaseWaitWhile=new JLabel(“启动服务时请稍候”);lblPleaseWaitWhile.setBounds(85,22,313,14);getContentPane().add(lblPleaseWaitWhile);setVisible(true);}@Pasupathi根据LoadingDialog类进行了更新。不要在EDT上下文之外更新UI组件。这实际上是SwingWorker的一个经典案例
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
final JDialog loading = new LoadingDialog();
loading.setVisible(true);
btn.setEnabled(false);
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
}
loading.dispose();
btn.setEnabled(true);
}
}).start();
}
});