我的问题与此有关SwingUtilities.invokeLater.我应该什么时候使用它?每次需要更新GUI组件时是否必须使用?它到底是做什么的?是否有替代品,因为它听起来不直观,并添加看似不必要的代码?
为什么需要将GUI更新代码放入SwingUtilities.invokeLater()?
为什么它不能被Swing本身内部照顾?为什么调用者必须关心swing如何处理UI更新?
经过多年的Java编程,我总是习惯于创建main()这样的方法:
public static void main(String[] args)
{
runProgram();
}
Run Code Online (Sandbox Code Playgroud)
但是最近我从Web上学习了一些代码并且有时看到这个代码而不是main()上面的常规用法:
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
runProgram();
}
});
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道:
main()方式?当我试一试时,我看不出有任何区别.感谢您阅读我和您的答案.
可能重复:
SwingUtilities.invokeLater做什么?
SwingUtilities.invokeLater
我已经看过几百次这段代码了:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:做invokeLater()什么?如果我只是在主线程中创建并显示我的GUI,会发生什么样的坏事?
在我正在阅读的书中,带有多线程的GUI的每个例子都有类似的东西:
public static void main(String[] args) throws Exception
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new SomeKindOfFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
Run Code Online (Sandbox Code Playgroud)
(我的意思是EventQueue).但是不是主(EDT)线程中自动执行的代码?
我最近发现了一个示例代码:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
Run Code Online (Sandbox Code Playgroud)
该createAndShowGUI()方法打开用户界面窗口.然后我尝试修改代码如下:
public static void main(String[] args) {
createAndShowGUI();
}
Run Code Online (Sandbox Code Playgroud)
两个版本都同样有效.有什么不同?
我一直在寻找过去的一个小时,但是我一直找不到想要的解决方案。
我想使用来接受用户的多个输入JOptionPane,但我不希望它们全部都在一个对话框窗口中。我希望它过渡到下一个,或者只是弹出下一个。有没有办法做到这一点JOptionPane?
这是我到目前为止的内容:
import java.util.Scanner;
import javax.swing.*;
public class HomeWork2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Scanner input2 = new Scanner(System.in);
Scanner input3 = new Scanner(System.in);
Scanner input4 = new Scanner(System.in);
int days, assignments;
double temperature;
boolean isRaining;
JOptionPane.showInputDialog("How many days are left?");
days = input.nextInt();
JOptionPane.showInputDialog("How many assignments are due?");
assignments = input2.nextInt();
JOptionPane.showInputDialog("What is the temperature outside?");
temperature = input3.nextDouble();
JOptionPane.showInputDialog("Is it raining today?");
isRaining = input4.nextBoolean();
if(assignments<=0) …Run Code Online (Sandbox Code Playgroud) 谁能用简单的话向我解释这段代码:
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
chatWindow.append(text);
}
});
}
Run Code Online (Sandbox Code Playgroud)
请任何人给我详细的解释。