如何使用java中的线程在一个动画中实例化多个JFrame?
我这里有一段代码,它是一个带有简单动画的JFrame实例,在这里单击按钮并使用线程保持运行。我用一个按钮创建了一个UI,该按钮引用JFrame,问题是,当我再次单击该按钮,它引用另一个JFrame时,第二个JFrame的动画无法正常工作。即使我引用了5个JFrames,所有启动动画的按钮都只对第一个JFrames起作用。我想做的是尽可能多地引用实例,并且它们都是分开工作的。下面是带有动画的类的代码:如何使用java中的线程在一个动画中实例化多个JFrame?,java,multithreading,netbeans,Java,Multithreading,Netbeans,我这里有一段代码,它是一个带有简单动画的JFrame实例,在这里单击按钮并使用线程保持运行。我用一个按钮创建了一个UI,该按钮引用JFrame,问题是,当我再次单击该按钮,它引用另一个JFrame时,第二个JFrame的动画无法正常工作。即使我引用了5个JFrames,所有启动动画的按钮都只对第一个JFrames起作用。我想做的是尽可能多地引用实例,并且它们都是分开工作的。下面是带有动画的类的代码: public class duduleo extends JFrame implements A
public class duduleo extends JFrame implements ActionListener, Runnable{
JButton imagens;
int x=1;
static ImageIcon icon[] = new ImageIcon[11];
static JLabel l;
boolean anima=false;
public static void main(String args[]){
JFrame janela = new duduleo();
janela.show();
}
duduleo(){
icon[0]= new ImageIcon("duken1.jpg");
icon[1]= new ImageIcon("duken2.jpg");
icon[2]= new ImageIcon("duken3.jpg");
icon[3]= new ImageIcon("duken4.jpg");
icon[4]= new ImageIcon("duken5.jpg");
icon[5]= new ImageIcon("duken6.jpg");
icon[6]= new ImageIcon("duken7.jpg");
icon[7]= new ImageIcon("duken8.jpg");
icon[8]= new ImageIcon("duken9.jpg");
icon[9]= new ImageIcon("duken10.jpg");
icon[10]= new ImageIcon("duken11.jpg");
setSize(100,200);
setLocation(200,150);
getContentPane().setLayout(new GridLayout(2,1));
imagens = new JButton(icon[0]);
l= new JLabel(icon[0]);
imagens.addActionListener(this);
getContentPane().add(l);
getContentPane().add(imagens);
}
public void run(){
while(anima){
for(int i=0;i<icon.length;i++){
l.setIcon(icon[i]);
try{
Thread.sleep(100);
}catch(Exception e){}
}}}
public void actionPerformed(ActionEvent e){
anima=!anima;
Thread t;
t = new Thread(this);
t.start();
}}
公共类duduleo扩展JFrame实现ActionListener,Runnable{
JButton图像;
int x=1;
静态图像图标[]=新图像图标[11];
静态JLabel;
布尔anima=false;
公共静态void main(字符串参数[]){
JFrame janela=新的dududuleo();
珍妮拉。秀();
}
杜杜略(){
图标[0]=新的图像图标(“duken1.jpg”);
图标[1]=新的图像图标(“duken2.jpg”);
图标[2]=新的图像图标(“duken3.jpg”);
图标[3]=新的图像图标(“duken4.jpg”);
图标[4]=新的图像图标(“duken5.jpg”);
图标[5]=新的图像图标(“duken6.jpg”);
图标[6]=新的图像图标(“duken7.jpg”);
图标[7]=新的图像图标(“duken8.jpg”);
图标[8]=新的图像图标(“duken9.jpg”);
图标[9]=新的图像图标(“duken10.jpg”);
图标[10]=新的图像图标(“duken11.jpg”);
设置大小(100200);
设定位置(200150);
getContentPane().setLayout(新的GridLayout(2,1));
imagens=新的JButton(图标[0]);
l=新的JLabel(图标[0]);
addActionListener(这个);
getContentPane()。添加(l);
getContentPane().add(图像);
}
公开募捐{
while(阿尼玛){
对于(inti=0;i我认为应该使用Swing的invokeLater(),否则它们会被放在事件调度线程上
请看下面的示例,了解习语:
另见:
不要在EDT上运行while/for循环。请参阅和否,当您第二次单击按钮时,不会实例化另一个JFrame。