如果我在 invokeLater 中创建了一个 class 的实例,那么在 EDT 上是否所有方法都在 class 运行 中?
If i create an instance of a class within invokeLater, are all methods within that class run on the EDT?
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Mainwindow frame = new MainWindow();
frame.setVisible(true);
}
public class MainWindow extends JFrame {
public MainWindow(){
// methods to set title, bounds, JPanels, etc.
}
public static void methodOne(){
// updates GUI
}
public static void methodTwo(){
// also updates GUI
}
问题 1:假设我打电话给
MainWindow.methodOne
来自 static main 内部,或来自另一个 class 在 static main 中实例化。
methodOne() 运行 来自 EDT 或初始线程?
问题二:参考上面的代码,在方法里面
@Override
public void run(){
}
最佳做法是使用:
MainWindow frame = new MainWindow();
frame.setVisibility(true);
或者简单地说:
new MainWindow();
并且有
setVisibility(true)
在 MainWindow 构造函数内部,考虑到 MainWindow 内部的所有方法都是静态的?
请把所有的答案都变哑,我对编码很陌生....
提前致谢
问题 1
方法中的代码将 运行 在调用它们的线程上运行,与您调用其方法的对象是在哪个线程上创建的无关。当您在特定线程上创建对象时,只有它的构造函数保证在该线程上 运行。
此外,在这种情况下,由于您有 static
方法,这些方法不属于 frame
实例,它们属于 MainWindow
class .
问题二
你使用什么方法取决于你想做什么。
第一种方法给了你更多的控制权,使用它,你可以在某个时候创建一个新的 class 实例并稍后显示它。
第二种方法通常用于主框架,程序启动时显示的框架可以将该语句放在class'构造函数中。
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Mainwindow frame = new MainWindow();
frame.setVisible(true);
}
public class MainWindow extends JFrame {
public MainWindow(){
// methods to set title, bounds, JPanels, etc.
}
public static void methodOne(){
// updates GUI
}
public static void methodTwo(){
// also updates GUI
}
问题 1:假设我打电话给
MainWindow.methodOne
来自 static main 内部,或来自另一个 class 在 static main 中实例化。
methodOne() 运行 来自 EDT 或初始线程?
问题二:参考上面的代码,在方法里面
@Override
public void run(){
}
最佳做法是使用:
MainWindow frame = new MainWindow();
frame.setVisibility(true);
或者简单地说:
new MainWindow();
并且有
setVisibility(true)
在 MainWindow 构造函数内部,考虑到 MainWindow 内部的所有方法都是静态的?
请把所有的答案都变哑,我对编码很陌生....
提前致谢
问题 1
方法中的代码将 运行 在调用它们的线程上运行,与您调用其方法的对象是在哪个线程上创建的无关。当您在特定线程上创建对象时,只有它的构造函数保证在该线程上 运行。
此外,在这种情况下,由于您有 static
方法,这些方法不属于 frame
实例,它们属于 MainWindow
class .
问题二
你使用什么方法取决于你想做什么。 第一种方法给了你更多的控制权,使用它,你可以在某个时候创建一个新的 class 实例并稍后显示它。
第二种方法通常用于主框架,程序启动时显示的框架可以将该语句放在class'构造函数中。