java canvas 随机显示不正确的图像

java canvas shows incorrect image at random

我有一个从 Canvas class 扩展而来的代码。我使用了这个 class 的两个实例。每个显示一个图像,大约每秒刷新一次的图像是什么。现在,当我只使用其中一个时,它可以正常工作,但是当同时使用它们时,它们会随机显示另一个 Canvas 的图像。

感谢任何帮助

    package com.imagedisplay;

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.Color;
import java.io.File;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JFileChooser;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.AbstractAction;
import javax.swing.event.MenuListener;
import javax.swing.event.MenuEvent;
import java.awt.image.BufferedImage;

import com.gamedeconstructor.image.ImageEngine;
import com.util.Timer;

public class View3d extends Canvas 
{
    //the current rendering.
    BufferedImage bImage;
    //the parent panel, its width and height used.
    JPanel parent;

    public View3d(JPanel inParent)
    {
        setupBufferStrategy();

        parent = inParent;

        revalidate();
        repaint();
    }

    public void setImage(BufferedImage inImage)
    {
        bImage = inImage;
        render();
    }

    @Override
    public void paint(Graphics g)
    {
        super.paint(g);
        render();
    }

    public void render()
    {
        BufferStrategy bs = this.getBufferStrategy();
        if(bImage!=null)
        {
            Graphics g = bs.getDrawGraphics();
            BufferedImage scaled = ImageEngine.scale(bImage,parent.getWidth(),parent.getHeight());
            setSize(parent.getWidth(),parent.getHeight());
            g.drawImage(scaled,0,0,null);
            g.dispose();
            bs.show();
        }
    }

    public void setupBufferStrategy()
    {
        BufferStrategy bs = this.getBufferStrategy();
        if(bs == null)
        {
            this.createBufferStrategy(1);
            return;
        }
    }
}

原来问题出在代码的不同区域。

java 使用命令行,命令的输出存储在硬盘驱动器上,java 必须再次读取。虽然调用了 process.waitfor,但这仍然没有阻止 FileIO.read 调用读取上一张图像。一旦我添加了 FileIO.delete 命令,问题就消失了。现在我希望出现异常而不是解决这个问题,因为如果程序可以到达以前的图像,只有 p.waitfor 调用来防止它,而不是现在它被删除,而且它的时间还为时过早尝试读取图像文件。它应该无法找到该文件。但无论如何,它有效。

感谢您的光临。