等待框架创建
Waiting for frame creation
我在 java 中遇到问题,我不认识他,但我解决了。
我创建了一个简单的程序,使用 for
和 sleep
函数插入文本 JPanel
。
像这样(这是一个例子):
public class example{
JFrame frame....
..
..
public example(){
//ini frame and label.. then..
String s = "abcqweewqewqewqewqweqwqeweqweqwq";
//DO ANIMATION
try
{
for(int i = 0;i<s.length();i++)
{
JLABEL.append(String.valueOf(s.charAt(i)));
Thread.sleep(10);
}
}catch(Exception ex){}
}
public static void main.......{
new example();
}
}
完美运行(在一定时间间隔后写入字符)
但是,如果我使用其他 class 调用这个 main - 所以等到一切都呈现然后 window 出现( 所以没有动画).
哪里有问题?我希望,你能理解我。
Swing 是单线程的,正确编写的 swing 代码在 event dispatch thread 中运行。您的示例通过在 EDT 外部创建 GUI 来打破线程规则,并且还在主线程中运行循环。通常,当在 EDT 中正确创建时,或作为对按钮单击或类似事件的响应时,循环 会阻塞事件调度线程 以便在循环完成之前不会进行绘制完成。
如果在事件分派线程中初始化 GUI,就会出现这种行为:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new example()
}
});
}
正确的方法是使用 Swing Timer.
,而不是在 EDT 中休眠
综上所述:您的代码似乎可以正常工作,因为它有错误,它在事件调度线程之外运行了一些 UI 代码。
我在 java 中遇到问题,我不认识他,但我解决了。
我创建了一个简单的程序,使用 for
和 sleep
函数插入文本 JPanel
。
像这样(这是一个例子):
public class example{
JFrame frame....
..
..
public example(){
//ini frame and label.. then..
String s = "abcqweewqewqewqewqweqwqeweqweqwq";
//DO ANIMATION
try
{
for(int i = 0;i<s.length();i++)
{
JLABEL.append(String.valueOf(s.charAt(i)));
Thread.sleep(10);
}
}catch(Exception ex){}
}
public static void main.......{
new example();
}
}
完美运行(在一定时间间隔后写入字符) 但是,如果我使用其他 class 调用这个 main - 所以等到一切都呈现然后 window 出现( 所以没有动画).
哪里有问题?我希望,你能理解我。
Swing 是单线程的,正确编写的 swing 代码在 event dispatch thread 中运行。您的示例通过在 EDT 外部创建 GUI 来打破线程规则,并且还在主线程中运行循环。通常,当在 EDT 中正确创建时,或作为对按钮单击或类似事件的响应时,循环 会阻塞事件调度线程 以便在循环完成之前不会进行绘制完成。
如果在事件分派线程中初始化 GUI,就会出现这种行为:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new example()
}
});
}
正确的方法是使用 Swing Timer.
,而不是在 EDT 中休眠综上所述:您的代码似乎可以正常工作,因为它有错误,它在事件调度线程之外运行了一些 UI 代码。