Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java中的线程在一个动画中实例化多个JFrame?_Java_Multithreading_Netbeans - Fatal编程技术网

如何使用java中的线程在一个动画中实例化多个JFrame?

如何使用java中的线程在一个动画中实例化多个JFrame?,java,multithreading,netbeans,Java,Multithreading,Netbeans,我这里有一段代码,它是一个带有简单动画的JFrame实例,在这里单击按钮并使用线程保持运行。我用一个按钮创建了一个UI,该按钮引用JFrame,问题是,当我再次单击该按钮,它引用另一个JFrame时,第二个JFrame的动画无法正常工作。即使我引用了5个JFrames,所有启动动画的按钮都只对第一个JFrames起作用。我想做的是尽可能多地引用实例,并且它们都是分开工作的。下面是带有动画的类的代码: public class duduleo extends JFrame implements A

我这里有一段代码,它是一个带有简单动画的JFrame实例,在这里单击按钮并使用线程保持运行。我用一个按钮创建了一个UI,该按钮引用JFrame,问题是,当我再次单击该按钮,它引用另一个JFrame时,第二个JFrame的动画无法正常工作。即使我引用了5个JFrames,所有启动动画的按钮都只对第一个JFrames起作用。我想做的是尽可能多地引用实例,并且它们都是分开工作的。下面是带有动画的类的代码:

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。