#1 29.09.09 17:07
[java] Хелп, не работает двойная буферизация
Код: java:
package LAB1; //import java.applet.Applet; /** * * @author Администратор */ import java.io.IOException; import java.net.MalformedURLException; import javax.swing.event.MouseInputAdapter; import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.io.File; import java.net.URI; import java.net.URL; import javax.imageio.ImageIO; public class myAplet extends Applet { Image pic; // изображение из файла boolean picLoaded=false; // было ли полностью загружено private String m_FileName = "D:\\user\\YUG.JPG"; int x=50, y=50; private final String PARAM_String_1 = "fileName"; //------------------------------------------------------------------------<s> public myAplet () throws MalformedURLException, IOException{ //String param; // param = getParameter(PARAM_String_1); // if (param != null)m_FileName = param; // URL addUrl=new URL("http://hostel.nstu.ru/img/logo/NoodleSquare/logo_left.jpg"); pic=ImageIO.read(new File(m_FileName)); // pic=getImage(addUrl); //Крутим двойную буферизацию Image offScreenImage=createImage(400,400); Graphics offScreenGraphics= offScreenImage.getGraphics(); offScreenGraphics.drawImage(pic,0,0,this); //Вертим ее же MouseInputAdapter pm; pm = new MouseInputAdapter(){ public void mousePressed(java.awt.event.MouseEvent e) { x=e.getX(); y=e.getY(); System.out.println(x); repaint(); } }; this.addMouseListener(pm); KeyAdapter pk; pk = new KeyAdapter(){ public void keyPressed(KeyEvent e) { System.out.println(e); int keyCode = e.getKeyCode(); switch(keyCode) { case KeyEvent.VK_DOWN: y = y + 5; repaint(); break; case KeyEvent.VK_UP: y = y — 5; repaint(); break; case KeyEvent.VK_RIGHT: x = x + 5; repaint(); break; case KeyEvent.VK_LEFT: x = x — 5; repaint(); break; } } }; this.addKeyListener(pk); } //</s>----------------------------------------------------------------------<s> public String getAppletInfo(){ return «Name: MouseEvent \r\n» +""; } public String[][] getParameterInfo(){ String[][] info = { { PARAM_String_1, «fileName», «name of file» }, }; return info; } //</s>----------------------------------------------------------------------<s> public void init(){ } //</s>----------------------------------------------------------------------<s> public boolean imageUpdate(Image img, int infoflags,int x, int y,int w, int h) { if(infoflags==ALLBITS) { // изображение загружено полностью picLoaded=true; repaint();<i> перерисовать окно апплета </i> больше метод imageUpdate не вызывать return false; } return true; // изображение загружено в память не полностью } <i></s>----------------------------------------------------------------------<s> </i></s>------------------------------------------------------------------------ public void paint (Graphics g) { if(picLoaded) { <i> четвертым параметром передается null, </i> он не позволяет функции drawImage() вызывать // метод imageUpdate() в процессе вывода g.drawImage(pic,0,0,null); // сообщение в панель состояния showStatus("Done"); } else { // сообщение в панель состояния showStatus("Loading image"); } } // public static void main(String args[]) throws MalformedURLException, IOException { Frame fr = new Frame("Апплет двойного назначения"); myAplet c = new myAplet(); c.init(); fr.add©; fr.setSize(400,300); fr.setVisible(true); fr.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
Аплет двойного назначения, при исоплзовании двойной буяферизации выдает ошибки:
Exception in thread «main» java.lang.NullPointerException
at LAB1.myAplet.<init>(myAplet.java:41)
at LAB1.myAplet.main(myAplet.java:124)
Java Result: 1
Offline
#8 30.09.09 23:46
Re: [java] Хелп, не работает двойная буферизация
ты пытаешься вызвать функцию у аплета когда он ещё не создан. переноси всю эту хрень в init. Вообще, судя по коду, у тебя каша в голове.
даёт выигрыш только при частых перерисовках а не при однократном вызове.
Offline
#9 30.09.09 23:58
Re: [java] Хелп, не работает двойная буферизация
$up, ну тока начал изучение явы=) задание делал по методичке, это ка раз необходимо для однократного вызова, создается вирт экран куда грузится картинка, а только потом она оображается на экране пользователя. Так написано в методе=)
Offline

