我已经编写了以下程序,在java中借助线程技术创建动画。但它将o/p作为透明窗口
根据事件委托模型,我使用了一个处理程序类我已经编写了以下程序,在java中借助线程技术创建动画。但它将o/p作为透明窗口,java,multithreading,swing,animation,Java,Multithreading,Swing,Animation,根据事件委托模型,我使用了一个处理程序类 package simple; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ButtonHandler implements ActionListener { MainFrame frame; public ButtonHandler(MainFrame frame) { this.fra
package simple;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonHandler implements ActionListener {
MainFrame frame;
public ButtonHandler(MainFrame frame) {
this.frame = frame;
}
@Override
public void actionPerformed(ActionEvent e) {
MyThread thread = new MyThread(frame);
Thread mthread = new Thread(thread);
mthread.start();
}
}
一个用于创建框架的大型机类
package simple;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class MainFrame extends JFrame {
JButton btnStart = new JButton("Start");
int xPos1,xPos2;
public MainFrame()
{
setSize(700, 600);
setLayout(null);
setVisible(true);
xPos1=10;
xPos2=600;
btnStart.setBounds(590, 30, 100, 30);
add(btnStart);
btnStart.addActionListener(new ButtonHandler(this));
paint(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void paint(Graphics g) {
g.drawString("Seed", xPos1, 50);
g.drawString("Infotech", xPos2, 550);
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
一个实现可运行接口的线程类
package simple;
public class MyThread implements Runnable {
MainFrame frame;
public MyThread(MainFrame frame) {
super();
this.frame = frame;
}
@Override
public void run() {
while(true)
{
frame.repaint();
try {
frame.xPos1++;
frame.xPos2--;
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
//////////////////////////////////////////////////////////////
一个类只用于main方法
package simple;
public class Test {
public static void main(String[] args) {
new MainFrame();
}
}
谁能告诉我问题出在哪里,因为我对java编程概念还不熟悉
JFrame
)的绘制
super.paint(g)代码>
paint(空)
setLayout(空)
您可能会发现
javax.swing.Timer
更有用,而不是使用线程。查看更多详细信息不要阻止EDT(事件调度线程)-发生这种情况时,GUI将“冻结”。不要调用Thread.sleep(n)
为重复任务执行Swing计时器,或为长时间运行的任务执行SwingWorker
。有关详细信息,请参阅。有关如何创建动画,请参阅中的worldwiew
类。为了更快地获得更好的帮助,请发布一条消息(如链接答案中所示)。正如旁注所示,10毫秒的睡眠时间是100 fps,对于如此简单的事情,这可能有点太多了。大约40毫秒(约25fps)可能会导致更好的性能,因为系统需要更多的时间来刷新其队列…IMHO