После того, как я запустил свой апплет, каждый компонент рисуется хорошо, кроме моего фонового изображения, которое нарисовано с задержкой в половину секунды. Я удалил свою нить, думая, что это может быть причиной моей проблемы, но это не так, поэтому я не включил ее здесь ... Я использую 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);
}
}
Я вижу, что вы объявляете новый объект «Graphics» и переходите в метод рисования. У метода обновления уже есть объект «Graphics g». Пробовал ли вы использовать этот объект вместо объявленной переменной doubleG для рисования ваших компонентов? – Orin
Что-то, что может помочь вам отлаживать, выставлять операторы печати до (и после) каждого вызова 'drawImage' и' start'. Что ты видишь? В качестве альтернативы используйте отладчик и выполните шаг, чтобы убедиться, что ваш код работает в правильном порядке. – meepzh
Я бы 1) переместил код из 'update' в метод' init'. 2) удалить переопределенный метод 'update'. 3) изменить 'public void paint (Graphics g) {' to 'public void paint (Графика g) {super.paint (g);' .. –