Официальный сайт студ.городка НГТУ
Программирование и БД » [java] Хелп, не работает двойная буферизация 

#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 &#8212; 5; repaint(); break;
               case KeyEvent.VK_RIGHT:
                        x = x + 5; repaint(); break;
               case KeyEvent.VK_LEFT:
                        x = x &#8212; 5; repaint(); break;
              }
       }
      };
       this.addKeyListener(pk);
}
//</s>----------------------------------------------------------------------<s>
public String getAppletInfo(){
return &#171;Name: MouseEvent \r\n&#187; +"";
}
public String[][] getParameterInfo(){
String[][] info =
{
{ PARAM_String_1, &#171;fileName&#187;, &#171;name of file&#187; },
};
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

#2  30.09.09 21:19

Re: [java] Хелп, не работает двойная буферизация

Нельзя использовать апплет в обычном приложении, закомментируй или удали main и открывай апплет либо в браузере либо в аплетвьюере.

Offline

#3  30.09.09 21:24

Re: [java] Хелп, не работает двойная буферизация

это аплет двойного назначения=), этот код должен работать если запускать как приложение. Если как аплет, да ты прав нужно коментить мейн, но ошибки теже

Offline

#4  30.09.09 22:23

$up
Профиль

Re: [java] Хелп, не работает двойная буферизация

В чём проблема в дебагере пошагово пройти и посмотреть какой объект не создался и почему?

Offline

#5  30.09.09 22:25

Re: [java] Хелп, не работает двойная буферизация

$up, не осздается
Image offScreenImage=createImage(400,400);
почему хз

Offline

#6  30.09.09 23:07

$up
Профиль

Re: [java] Хелп, не работает двойная буферизация

наверное потому что не нужно это в конструкторе делать

Offline

#7  30.09.09 23:09

Re: [java] Хелп, не работает двойная буферизация

при попытке запихать в инит тоже помоему не роит, вроде как говорят фишка в том, что для приложения нет такой функции, только для аплета она.

Offline

#8  30.09.09 23:46

$up
Профиль

Re: [java] Хелп, не работает двойная буферизация

ты пытаешься вызвать функцию у аплета когда он ещё не создан. переноси всю эту хрень в init. Вообще, судя по коду, у тебя каша в голове.     
   

Код: java:

 Image offScreenImage=createImage(400,400);
    Graphics offScreenGraphics= offScreenImage.getGraphics();
    offScreenGraphics.drawImage(pic,0,0,this);

даёт выигрыш только при частых перерисовках а не при однократном вызове.

Offline

#9  30.09.09 23:58

Re: [java] Хелп, не работает двойная буферизация

$up, ну тока начал изучение явы=) задание делал по методичке, это ка раз необходимо для однократного вызова, создается вирт экран куда грузится картинка, а только потом она оображается на экране пользователя. Так написано в методе=)

Offline

Программирование и БД » [java] Хелп, не работает двойная буферизация 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.116 сек.
Выполнено 14 запросов.