Java线程必须显示新的随机图像

时间:2016-09-01 04:16:27

标签: java arrays multithreading image random

目前我的代码每次执行时只显示1个随机图像。我不知道怎么让它显示一个"每2秒"例如。 (我知道它不完美,并且修复其余部分)我的代码有三个文件。 的第一

public class Main {
    private static final String photos[] = {"icon1.jpg", "icon2.jpg", "icon3.jpg"};
    private static final Color colors[] = {Color.black,Color.red};
    private static Random random = new Random();
    private static JFrame frame = new JFrame();
    private static FirstJFrame FirstJFrame = new FirstJFrame();

    public static void main(String args[]) throws InterruptedException{
        // This part is for displaying the date


        Thread thread = new SetRandomPhoto();
        thread.join();

        FirstJFrame.jButton1.addActionListener(new LoggingButtonActionListener());
        FirstJFrame.setResizable(false);
        FirstJFrame.setVisible(true);
    }   

    private static void stop(){
        thread.stop();
        frame.dispose();
        FirstJFrame.dispose();
    }
    private static void start() {
        thread.start();
    }

    public static class LoggingButtonActionListener implements ActionListener {
    @Override
        public void actionPerformed(ActionEvent e) {
            frame.name.setText(FirstJFrame.jTextField1.getText());
            frame.setResizable(false);
            frame.setVisible(true);
        }
    }

    public static class StopButtonActionListener implements ActionListener {
    @Override
        public void actionPerformed(ActionEvent e) {
            stop();
        }
    }
    public static class StartButtonActionListener implements ActionListener {
    @Override
        public void actionPerformed(ActionEvent e) {
            thread.start();
        }
    }

    private static class SetRandomPhoto extends Thread {
    @Override
        public void run() {
            int index = random.nextInt(photos.length);
            System.out.println(index);

            frame.image.setIcon(new ImageIcon(photos[index]));
        }
    }

}

SECOND

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
public class FirstJFrame extends javax.swing.JFrame {

    public FirstJFrame() {
        initComponents();
    }

 @SuppressWarnings("unchecked")
    private void initComponents() {
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jButton1.setFont(new java.awt.Font("Verdana", 0, 18)); 
        jButton1.setText("ok");
        jLabel1.setFont(new java.awt.Font("Verdana", 0, 24)); 
        jLabel1.setText("Enter name:");
        jTextField1.setFont(new java.awt.Font("Verdana", 0, 18)); 
        jTextField1.setToolTipText("");
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel1)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(layout.createSequentialGroup()
            .addGap(101, 101, 101)
            .addComponent(jButton1,
            javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)) 
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
            layout.createSequentialGroup()
            .addGap(71, 71, 71)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLabel1)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE,29, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(18, 18, 18)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 44,
            javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE))
         );
         pack();
    }

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FirstJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FirstJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FirstJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FirstJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FirstJFrame().setVisible(true);
            }
        });
    }

    public javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    public javax.swing.JTextField jTextField1;
}

THIRD

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
public class JFrame extends javax.swing.JFrame {

    public JFrame() {
        initComponents();
    }

 @SuppressWarnings("unchecked")

    private void initComponents() {
        image = new javax.swing.JLabel();
        name = new javax.swing.JLabel();
        stop = new javax.swing.JButton();
        start = new javax.swing.JButton();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        name.setText("jLabel1");
        stop.setFont(new java.awt.Font("Verdana", 0, 14)); 
        stop.setText("Stop Thread");
        start.setFont(new java.awt.Font("Verdana", 0, 14)); 
        start.setText("Start Thread");
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGap(86, 86, 86)
            .addComponent(image, javax.swing.GroupLayout.PREFERRED_SIZE,
            193, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(layout.createSequentialGroup()
            .addGap(138, 138, 138)
            .addComponent(stop))
            .addGroup(layout.createSequentialGroup()
            .addGap(162, 162, 162)
            .addComponent(name)))
            .addContainerGap(121, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(name)
            .addGap(33, 33, 33)
            .addComponent(image, javax.swing.GroupLayout.PREFERRED_SIZE, 165,
            javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(stop)
            .addContainerGap(34, Short.MAX_VALUE))
        );
        image.getAccessibleContext().setAccessibleName("image");
        pack();
    }

    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE,null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE,null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE,null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE,null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JFrame().setVisible(true);
            }
        });
    }

    public javax.swing.JLabel image;
    public javax.swing.JLabel name;
    public javax.swing.JButton stop;
    public javax.swing.JButton start;
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个重新安排自己的任务:

public class SchedulerExample {
    static ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
    public static void main(String[] args) {

        pool.schedule(new Refresher(), 2, TimeUnit.SECONDS);

    }

    private static class Refresher implements Runnable  {
        @Override
        public void run() {
            System.out.println("Doing something " + System.currentTimeMillis());

            pool.schedule(this, 2, TimeUnit.SECONDS);
        }
    }
}