Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 如何在执行其他任务时将元素添加到被阻止任务的数组中_Java - Fatal编程技术网

Java 如何在执行其他任务时将元素添加到被阻止任务的数组中

Java 如何在执行其他任务时将元素添加到被阻止任务的数组中,java,Java,我正在制作一个简单的多线程程序,我有一个表示任务的字符串数组。每当我按下按钮时,就会创建一个代表任务的字符串并将其添加到数组中,当我松开按钮时,就会执行该任务。但是,由于某些原因,数组始终包含一个元素。 例如,每当我执行task close()并在它完成执行之前单击accelerate,accelerate会在close()完成后立即执行,但在close()完成执行之前不会添加到数组中 // Add Accelerate Task To Array btnNewButton_1.addMouse

我正在制作一个简单的多线程程序,我有一个表示任务的字符串数组。每当我按下按钮时,就会创建一个代表任务的字符串并将其添加到数组中,当我松开按钮时,就会执行该任务。但是,由于某些原因,数组始终包含一个元素。 例如,每当我执行task close()并在它完成执行之前单击accelerate,accelerate会在close()完成后立即执行,但在close()完成执行之前不会添加到数组中

// Add Accelerate Task To Array
btnNewButton_1.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                if (!running) {
                    label_1.setText("Click start to run Car");
                    return;
                }
                list.add("Accelerate2");
                DefaultTableModel model = (DefaultTableModel) table.getModel();
                String s = list.poll();
                model.addRow(new Object[] { s.substring(0, s.length() - 1) });

            }
        });

// Execute Accelerate Task
btnNewButton_1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                try {
                    if (!running) {
                        label_1.setText("Click start to run Car");
                        return;
                    }
                    accelerate();
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
// Task that takes some time to get executed
public void close() throws InterruptedException {
        while (true) {
            if (semaphore == 1) {
                semaphore--;
                DefaultTableModel model = (DefaultTableModel) table.getModel();
                if (table.getRowCount() > 0) {
                    model.removeRow(0);
                }
                for (int i = 4; i > 0; i--) {
                    label_1.setText("windows are closing .");
                    TimeUnit.MILLISECONDS.sleep(500);
                    label_1.setText("windows are closing ..");
                    TimeUnit.MILLISECONDS.sleep(500);
                    label_1.setText("windows are closing ...");
                    TimeUnit.MILLISECONDS.sleep(500);
                }
                label_1.setText("windows are closed");
                break;
            }
        }
        semaphore++;
    }