java canvas随机显示不正确的图像
Posted
技术标签:
【中文标题】java canvas随机显示不正确的图像【英文标题】:java canvas shows incorrect image at random 【发布时间】:2021-12-17 16:04:57 【问题描述】:我有一个从 Canvas 类扩展而来的代码。我使用了这个类的两个实例。每个显示一个图像,大约每秒刷新一次的图像是什么。现在,当我只使用其中一个时,它可以正常工作,但同时使用它们时,它们会随机显示另一个 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;
【问题讨论】:
【参考方案1】:问题出在代码的不同区域。
java 使用命令行,命令的输出存储在硬盘驱动器上,然后 java 必须再次读取该驱动器。虽然调用了 process.waitfor,但这仍然没有阻止 FileIO.read 调用读取前一个图像。一旦我添加了 FileIO.delete 命令,问题就消失了。现在我希望出现一个异常而不是解决这个问题,因为如果程序可以到达上一个图像,那么只有一个 p.waitfor 调用来防止这种情况,而不是现在它被删除了,而且它尝试这样做还为时过早读取图像文件。它应该找不到文件。但无论如何,它有效。
感谢您的光临。
【讨论】:
“问题出在代码的不同区域。”这就是问题应该包含minimal reproducible example的原因之一。以上是关于java canvas随机显示不正确的图像的主要内容,如果未能解决你的问题,请参考以下文章