Попробуйте передать контекст апплета методу drawImage
, это позволяет приложению получать уведомления о загрузке изображения и перерисовывать себя.
g2.drawImage(image,100,100,100, 100, this);
И, если вы действительно в отчаянии, вызовите invalidate()
repaint()
в методе start
ОБНОВЛЕНИЕ ПРИМЕРОМ
Это код, который я использовал. У меня не было проблем с загрузкой изображения:
public class TestApplet extends JApplet {
public void init() {
System.out.println("Init..." + EventQueue.isDispatchThread());
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createGUI();
}
});
}
public void start() {
System.out.println("Start..." + EventQueue.isDispatchThread());
}
public void createGUI() {
URL documentBase = getDocumentBase();
System.out.println(documentBase);
System.out.println(getCodeBase());
// file:.../build/TestApplet.html
// file:.../build/classes/
Image image = getImage(documentBase, "MT-vol-6-STOP-image-Kogumiko-megatokyo-11434773-1559-1852.jpg");
System.out.println("image = " + image);
getContentPane().add(new GUIThing(image));
}
public class GUIThing extends JPanel {
Image image;
public GUIThing(Image i2) {
image = i2;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 0, 0, this);
g2.setColor(Color.RED);
g2.drawLine(0, 0, getWidth(), getHeight());
}
}
}
Ух ты, с апплетами давно не играл. Я изменил ваш код с использования базы кода на базу документов, которая, похоже, сработала. Я загружал изображение размером 1559x1852 пикселей практически без задержки (локально)
Дважды проверьте свой тег апплета в HTML-файле. Я использовал
<APPLET codebase="classes" code="stack/TestApplet.class" width=350 height=200></APPLET>
Через программу просмотра апплетов. Обратите внимание, что база кода отличается от базы документа !!
Мое изображение находилось в том же месте, что и HTML-файл
person
MadProgrammer
schedule
25.07.2012
repaint();
в конецcreateGUI()
? - person tskuzzy   schedule 25.07.2012ImageIO.read(...)
. Кроме того, я считаю, что для JApplet вы должны использоватьSwingUtilities.invokeAndWait(...)
, а неSwingUtilities.invokeLater(...)
- person Hovercraft Full Of Eels   schedule 25.07.2012EDT
. Я никогда не должен был принимать это как должное: P - person MadProgrammer   schedule 26.07.2012