2016-06-29 5 views
0

После того, как я запустил свой апплет, каждый компонент рисуется хорошо, кроме моего фонового изображения, которое нарисовано с задержкой в ​​половину секунды. Я удалил свою нить, думая, что это может быть причиной моей проблемы, но это не так, поэтому я не включил ее здесь ... Я использую Double Buffering, потому что у меня будут мерцание моих компонентов, которые перекрашиваются потоком. Я постарался предоставить как можно меньше кода ...Изображение нарисовано на полсекунды позже, затем другие компоненты краски.

public class balg extends Applet implements Runnable { 


    private Image i; 
    private Graphics doubleG; 
    URL url; 
    Image city; //background image 


    public void init(){ 
     setSize(800, 600); 

     try{ 
      url = getDocumentBase(); 
     }catch(Exception e){ 

     } 
     city = getImage(url , "multiplen/images/SPACE.png"); 
    } 


    public void start(){ 

     Thread thread = new Thread(this); 
     thread.start(); 

    } 

    public void run(){ 

    // here goes the repiant(); 

    } 

    public void stop(){ 


    } 

    public void destroy(){ 


    } 

    @Override 
    public void update(Graphics g) { 
     if(i == null){ 
      i = createImage(this.getSize().width, this.getSize().height); 
      doubleG = i.getGraphics(); 
     } 

     doubleG.setColor(getBackground()); 
     doubleG.fillRect(0, 0, this.getSize().width, this.getSize().height); 

     doubleG.setColor(getForeground()); 
     paint(doubleG); 

     g.drawImage(i, 0,0, this); 
    } 

    public void paint(Graphics g){ 

     g.drawImage(city,(int) 800 , 0 , this); // it's drawn here 

     String s = "15"; 
     g.setColor(Color.BLACK); 
     g.drawString(s, getWidth() - 150, 50);  
    } 

} 
+0

Я вижу, что вы объявляете новый объект «Graphics» и переходите в метод рисования. У метода обновления уже есть объект «Graphics g». Пробовал ли вы использовать этот объект вместо объявленной переменной doubleG для рисования ваших компонентов? – Orin

+0

Что-то, что может помочь вам отлаживать, выставлять операторы печати до (и после) каждого вызова 'drawImage' и' start'. Что ты видишь? В качестве альтернативы используйте отладчик и выполните шаг, чтобы убедиться, что ваш код работает в правильном порядке. – meepzh

+0

Я бы 1) переместил код из 'update' в метод' init'. 2) удалить переопределенный метод 'update'. 3) изменить 'public void paint (Graphics g) {' to 'public void paint (Графика g) {super.paint (g);' .. –

ответ

1

Требуется много времени, чтобы прочитать изображение около 100-200 мс.