Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Swing - Fatal编程技术网

Java 单JFrame中的多线程

Java 单JFrame中的多线程,java,multithreading,swing,Java,Multithreading,Swing,我试图创建两个线程,每个线程在一个帧中为自己的面板工作,我的意思是,我试图在一个帧中同时更改图像,但在一个帧中更改两个相同大小的不同面板中的图像 我已经做了两个不同的帧运行自己的图像,但我想在一个单独的帧在它自己的面板 我的编码是: import javax.swing.*; import org.omg.CORBA.Object; import java.awt.*; class subviewer1 extends JFrame implements Runnable{ Thre

我试图创建两个线程,每个线程在一个帧中为自己的面板工作,我的意思是,我试图在一个帧中同时更改图像,但在一个帧中更改两个相同大小的不同面板中的图像

我已经做了两个不同的帧运行自己的图像,但我想在一个单独的帧在它自己的面板

我的编码是:

import javax.swing.*;
import org.omg.CORBA.Object;
import java.awt.*;

class subviewer1 extends JFrame implements Runnable{

    Thread t2 = new Thread();

    JFrame f1;
    //JLabel label;
    JPanel p1;
    ImageIcon icon; //= new ImageIcon("C:\\img.png");
        JLabel label = new JLabel(icon); 

    int imgPath = 1;

    public subviewer1(){        
        super();
        t2.start();
        /*
        f1 = new JFrame("PIC VIEWER");
        f1.setLayout(null);
        f1.setSize(500,500);
        f1.setLocation(0,0);        
        p1 = new JPanel();      
        while(true)
        {
            try {
            while (true) {          
                Thread.sleep(1000);                
                p1.setSize(500,500);
                p1.setLocation(0,0);                
                switch(imgPath)
                {
                    case 1:
                        //f1.remove(p1);
                        p1.remove(label);
                        p1.setVisible(false);
                        p1.removeAll();
                        ImageIcon icon = new ImageIcon("C:\\img.png");
                        JLabel label = new JLabel(icon); 
                        p1.add(label);
                        p1.setVisible(true);
                        imgPath = 2;
                        break;
                    case 2:
                        //f1.remove(p1);
                        p1.removeAll();
                        p1.setVisible(false);
                        ImageIcon icon1 = new ImageIcon("C:\\img1.png");
                        JLabel label1 = new JLabel(icon1);
                        p1.add(label1);
                        p1.setVisible(true);
                        imgPath = 3;
                        break;
                    case 3:
                        //f1.remove(p1);
                        p1.removeAll();
                        p1.setVisible(false);
                        ImageIcon icon2 = new ImageIcon("C:\\img2.png");
                        JLabel label2 = new JLabel(icon2); 
                        p1.add(label2);
                        p1.setVisible(true);
                        imgPath = 4;
                        break;
                    case 4:
                        //f1.remove(p1);
                        p1.setVisible(false);
                        p1.removeAll();
                        ImageIcon icon3 = new ImageIcon("C:\\img3.png");
                        JLabel label3 = new JLabel(icon3);    
                        p1.add(label3);
                        p1.setVisible(true);
                        imgPath = 1;
                        break;
                }                
                f1.add(p1);
                f1.setVisible(true);
                f1.setLayout(null);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
            } catch (InterruptedException iex) {
                System.out.println(iex);
            }
        }
         //initComponents();         
    }

    @Override
    public void run() {     
        {           
            f1 = new JFrame("PIC VIEWER");
            //f1.setLayout(null);
            f1.setSize(500,500);
            f1.setLocation(0,0);
            p1 = new JPanel();          
            while(true)
            {
                try {
                while (true) {              
                    Thread.sleep(1000);                 
                    p1.setSize(250,500);
                    p1.setLocation(0,0);                    
                    switch(imgPath)
                    {
                        case 1:
                            //f1.remove(p1);
                            p1.remove(label);
                            p1.setVisible(false);
                            p1.removeAll();
                            ImageIcon icon = new ImageIcon("C:\\img.png");
                            JLabel label = new JLabel(icon); 
                            p1.add(label);
                            p1.setVisible(true);
                            imgPath = 2;
                            break;
                        case 2:
                            //f1.remove(p1);
                            p1.removeAll();
                            p1.setVisible(false);
                            ImageIcon icon1 = new ImageIcon("C:\\img1.png");
                            JLabel label1 = new JLabel(icon1);
                            p1.add(label1);
                            p1.setVisible(true);
                            imgPath = 3;
                            break;
                        case 3:
                            //f1.remove(p1);
                            p1.removeAll();
                            p1.setVisible(false);
                            ImageIcon icon2 = new ImageIcon("C:\\img2.png");
                            JLabel label2 = new JLabel(icon2); 
                            p1.add(label2);
                            p1.setVisible(true);
                            imgPath = 4;
                            break;
                        case 4:
                            //f1.remove(p1);
                            p1.setVisible(false);
                            p1.removeAll();
                            ImageIcon icon3 = new ImageIcon("C:\\img3.png");
                            JLabel label3 = new JLabel(icon3);    
                            p1.add(label3);
                            p1.setVisible(true);
                            imgPath = 1;
                            break;
                    }                   
                    f1.add(p1);
                    f1.setVisible(true);
                    f1.setLayout(null);
                    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
                } catch (InterruptedException iex) {
                    System.out.println(iex);
                }
            }       
        }   
    }
}


这是针对不同的帧…但我希望在单个帧中完成…因此请更正我的代码或使用******线程.睡眠(int args);*******执行类似的代码只有

Swing不是线程安全的。也就是说,您只需要从单个线程(称为事件调度线程(又称EDT))中访问、更改或创建UI元素

您也不应该阻止EDT,例如使用
睡眠
等待
或阻止IO

虽然有许多可能的解决方案,但最简单的方法是使用
javax.swing.Timer
,因为它在EDT上下文中执行其计时,但在等待时不会阻止它

请查看以了解更多详细信息


我还建议简单地使用
JLabel
来显示图标,而不是添加和删除图标,只需将图标设置为新图像的参考

Swing不是线程安全的。也就是说,您只需要从单个线程(称为事件调度线程(又称EDT))中访问、更改或创建UI元素

您也不应该阻止EDT,例如使用
睡眠
等待
或阻止IO

虽然有许多可能的解决方案,但最简单的方法是使用
javax.swing.Timer
,因为它在EDT上下文中执行其计时,但在等待时不会阻止它

请查看以了解更多详细信息

我还建议您只需使用
JLabel
来显示图标,而不是添加和删除图标,只需将图标设置为新图像的参考即可(1)为了更快地获得更好的帮助,请发布一个。2) 请对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。为此,请选择示例并单击消息发布/编辑表单上方的
{}
按钮。3) 请对“you”、“your”和“Please”等词使用正确的拼写。这使人们更容易理解和帮助。1)要更快地获得更好的帮助,请发布一篇文章。2) 请对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。为此,请选择示例并单击消息发布/编辑表单上方的
{}
按钮。3) 请对“you”、“your”和“Please”等词使用正确的拼写。这使得人们更容易理解和帮助。
class subviewer2 extends JFrame implements Runnable{

    Thread t1 = new Thread();   
    JFrame f1;
    //JLabel label;
    JPanel p2;  
    ImageIcon icon; //= new ImageIcon("C:\\img.png");   
        JLabel label = new JLabel(icon);    
    int imgPath = 1;

    public subviewer2(){        
        super();
        t1.start();
        /*
        f1 = new JFrame("PIC VIEWER");
        f1.setLayout(null);
        f1.setSize(500,500);
        f1.setLocation(0,0);        
        p1 = new JPanel();

        while(true)
        {
            try {
            while (true) {          
                Thread.sleep(1000);                
                p1.setSize(500,500);
                p1.setLocation(0,0);                
                switch(imgPath)
                {
                    case 1:
                        //f1.remove(p1);
                        p1.remove(label);
                        p1.setVisible(false);
                        p1.removeAll();
                        ImageIcon icon = new ImageIcon("C:\\img4.png");
                        JLabel label = new JLabel(icon); 
                        p1.add(label);
                        p1.setVisible(true);
                        imgPath = 2;
                        break;
                    case 2:
                        //f1.remove(p1);
                        p1.removeAll();
                        p1.setVisible(false);
                        ImageIcon icon1 = new ImageIcon("C:\\img5.png");
                        JLabel label1 = new JLabel(icon1);
                        p1.add(label1);
                        p1.setVisible(true);
                        imgPath = 3;
                        break;
                    case 3:
                        //f1.remove(p1);
                        p1.removeAll();
                        p1.setVisible(false);
                        ImageIcon icon2 = new ImageIcon("C:\\img6.png");
                        JLabel label2 = new JLabel(icon2); 
                        p1.add(label2);
                        p1.setVisible(true);
                        imgPath = 4;
                        break;
                    case 4:
                        //f1.remove(p1);
                        p1.setVisible(false);
                        p1.removeAll();
                        ImageIcon icon3 = new ImageIcon("C:\\img7.png");
                        JLabel label3 = new JLabel(icon3);    
                        p1.add(label3);
                        p1.setVisible(true);
                        imgPath = 1;
                        break;
                }                
                f1.add(p1);
                f1.setVisible(true);
                f1.setLayout(null);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            }
            } catch (InterruptedException iex) {
                System.out.println(iex);
            }
        }
         //initComponents();        
    }

    @Override
    public void run() {     
        {

            f1 = new JFrame("PIC VIEWER");
        //  f1.setLayout(null);
            f1.setSize(500,500);
            f1.setLocation(0,0);            
            p2 = new JPanel();          
            while(true)
            {
                try {
                while (true) {              
                    Thread.sleep(1000);                 
                    p2.setSize(350,500);
                    p2.setLocation(250,0);                  
                    switch(imgPath)
                    {
                        case 1:
                            //f1.remove(p1);
                            p2.remove(label);
                            p2.setVisible(false);
                            p2.removeAll();
                            ImageIcon icon = new ImageIcon("C:\\img4.png");
                            JLabel label = new JLabel(icon); 
                            p2.add(label);
                            p2.setVisible(true);
                            imgPath = 2;
                            break;
                        case 2:
                            //f1.remove(p1);
                            p2.removeAll();
                            p2.setVisible(false);
                            ImageIcon icon1 = new ImageIcon("C:\\img5.png");
                            JLabel label1 = new JLabel(icon1);
                            p2.add(label1);
                            p2.setVisible(true);
                            imgPath = 3;
                            break;
                        case 3:
                            //f1.remove(p1);
                            p2.removeAll();
                            p2.setVisible(false);
                            ImageIcon icon2 = new ImageIcon("C:\\img6.png");
                            JLabel label2 = new JLabel(icon2); 
                            p2.add(label2);
                            p2.setVisible(true);
                            imgPath = 4;
                            break;
                        case 4:
                            //f1.remove(p1);
                            p2.setVisible(false);
                            p2.removeAll();
                            ImageIcon icon3 = new ImageIcon("C:\\img7.png");
                            JLabel label3 = new JLabel(icon3);    
                            p2.add(label3);
                            p2.setVisible(true);
                            imgPath = 1;
                            break;
                    }                   
                    f1.add(p2);
                    f1.setVisible(true);
                    f1.setLayout(null);                 
                    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
                } catch (InterruptedException iex) {
                    System.out.println(iex);
                }           
            }

      }
     }
}

public class thdmkr extends Thread{

        Thread t1,t2;       
        subviewer1 obj1 = new subviewer1();
        subviewer2 obj2 = new subviewer2();     
        public thdmkr(){            
            //super();          
            t1 = new Thread(obj1);
            t2 = new Thread(obj2);
            t1.start();
            t2.start();         
        }

    public static void main(String args[]){     
        thdmkr obj = new thdmkr();      
    }

    public void run(){  

        }   
}