我有一個從 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;
}
}
}
uj5u.com熱心網友回復:
結果發現問題出在代碼的不同區域。
java 使用命令列,命令的輸出存盤在硬碟驅動器上,然后必須再次由 java 讀取。雖然 process.waitfor 被呼叫,但這仍然沒有阻止 FileIO.read 呼叫讀取前一個影像。一旦我添加了 FileIO.delete 命令,問題就消失了。現在我希望出現一個例外而不是解決這個問題,因為如果程式可以到達前一個影像,只有一個 p.waitfor 呼叫來阻止它,那么現在它被洗掉了,而且現在嘗試為時過早讀取影像檔案。它應該無法找到該檔案。但無論如何,它的作業原理。
謝謝你的時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351448.html
下一篇:彈出通知面板框不在右側
