gpt4 book ai didi

java - 为什么我的面板的重绘没有被调用?

转载 作者:行者123 更新时间:2023-12-03 12:58:01 24 4
gpt4 key购买 nike

我有一个问题,我似乎无法解决涉及小动画的问题。对于一个项目,我们正在设计一个在 PDA (DELL Axim X51) 上运行的 J9 应用程序。有问题的代码(如下所示)是在检测到鼠标单击以在嵌套面板中运行小动画时。如果动画独立于鼠标单击运行,则它可以正常工作并且可以完美地重新绘制。当识别鼠标单击时调用该方法时,我们会忽略每个动画间隔的重绘,并且只有在动画完成后才会重绘面板。
我认为这可能与识别鼠标单击时应用程序与自身同步停止任何内部方法调用或绘制操作没有比鼠标单击具有足够高的优先级有关。
My code:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class StatusLoader extends Panel implements Runnable{

int progress;

public static void main(String[] args) {
Frame f = new Frame();
StatusLoader mp = new StatusLoader();
mp.setBackground(Color.yellow);
f.add(mp);

f.setSize(300,300);
f.show();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
mp.start();
}

public void start(){
Thread t = new Thread(this);
t.run();

}

public void run(){
for (int i = 0; i < 10; i++) {
progress+=10;
this.repaint(0);
System.out.println(i);
try{
Thread.sleep(100);
}catch(InterruptedException ex){}
}
}

public void paint(Graphics g){
System.out.println("called repaint");
g.setColor(Color.red);
g.setFont(new Font("Sansserif",2,24));
FontMetrics fm = g.getFontMetrics();
int stringWidth = fm.stringWidth("Loading");
g.drawString("Loading", getWidth()/2-stringWidth/2, getHeight()/2);
g.setFont(new Font("Sansserif",2,12));
fm = g.getFontMetrics();
stringWidth = fm.stringWidth("Map ziles for the new zoom level");
g.drawString("Map tiles for the new zoom level", getWidth()/2-stringWidth/2, getHeight()/2+30);
g.drawRect(getWidth()/2-100, getHeight()/2+60, 200, 10);
g.setColor(Color.blue);
g.fillRect(getWidth()/2-100, getHeight()/2+60, progress*2, 10);
}

}

最佳答案

StatusLoader.start ,您使用 Thread.run而不是 Thread.start .这意味着 StatusLoader.run在事件线程上执行,这是一件非常糟糕的事情。将其更改为 t.start() .

关于java - 为什么我的面板的重绘没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com