Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > загрузка массива изображений


Автор: Demyens 6.6.2014, 11:29
Нужно создать апплет в окне которого выводится ряд подготовленных изображений. Изображения меняются когда курсор находится в апплете. Проблема с загрузкой. Не загружает и все.
Код

import java.applet.*;
import java.awt.*;
import java.net.*;
import java.util.*;
 
class MainWndFrame extends Frame {  // класс окна приложения
 
    public MainWndFrame(String str) {
        super (str);
    }
 
    public boolean handleEvent(Event evt){
        switch (evt.id) {
            case Event.WINDOW_DESTROY: dispose();
            System.exit(0);
            return true;
            default: return super.handleEvent(evt);
        }
    }
}
 
public class Main extends Applet {  // Основной класс приложения
        private Image[] images;     // массив картинок
        private int imgPosition = 0;    // индекс изображения
        private Thread timerThread;     // таймер-поток для смены изображения
        private boolean noStopRequested; // флаг продолжения смены картинок
        private boolean paused;         // флаг приостановки
// объект-монитор для последовательного выполнения
        private Object pauseLock = new Object();
//главная функция
        public static void main(String args[]) {
            MainWndFrame frame = new MainWndFrame("Курсовая Работа");
            frame.show(); frame.hide();
            frame.resize(400, 300);
            Main applet_Combi = new Main();
            frame.add("Center", applet_Combi);
            applet_Combi.init();
            applet_Combi.start();
            frame.show();
        }
// инициализация апплета
        public void init(){
            resize(400,300);
 
            images = new Image[5];
 
            // полные пути до изображений, учитывая каталог апплета
            URL base = null;
            try {
                base= getCodeBase();
             
                images[1] = getImage(base,"1.jpg");
                images[2] = getImage(base,"2.jpg");
                images[2] = getImage(base,"3.jpg");
                images[2] = getImage(base,"4.jpg");
            } catch(Exception e) {
            }
            repaint(); // первая отрисовка изображения
        }
 
        private void startThread(){  //старт runWork в новом потоке
                paused = false;
                noStopRequested = true;
 
                Runnable r = new Runnable(){
                        public void run(){
                                runWork();
                        }
                };
                timerThread = new Thread(r, "Timer");
                timerThread.start();
        }
 
        private void stopThread(){  //прерывание потока 
                noStopRequested = false;
                timerThread.interrupt();
        }
 
        // реализация смены картинок (надписей): зацикливание по индексу
        private void runWork(){
                try{
                   while(noStopRequested){
                           waitWhilePaused();
                           imgPosition = ( imgPosition + 1 ) % images.length;
                           repaint();
                           Thread.sleep(800); // пауза 800 милисекунд
                        }
                }catch(InterruptedException x){ // остановка по ошибке
                        Thread.currentThread().interrupt();
                        System.out.println("interrupt and return from run");
                }
        }
 
// в объект-монитор зашёл сторонний поток и состояние ожидания снимается
// активизирует все ожидающие потоки, вызвавшие метод wait() того же объекта
        private void setPaused(boolean newPauseState){
                synchronized(pauseLock){
                        if(paused != newPauseState){
                           paused = newPauseState;
                           pauseLock.notifyAll();
                        }
                }
        }
 
        private void waitWhilePaused() throws InterruptedException{
                synchronized(pauseLock){
                        while(paused){
                                // предписывает вызвавшему потоку отдать мони-тор и перейти в состояние ожидания,
                                // пока какой-нибудь другой поток не войдет в тот же монитор и не вызовет метод notify()
                                pauseLock.wait();
                        }
                }
        }
 
        // событие отрисовки апплета
        public void paint(Graphics g){
            update(g);
        }
        // очистка апплета, вывод строки, если картинка загрузилась – 
        // поверх рисуется картинка
        public void update(Graphics g){
            g.clearRect(0,0,300,400);
            g.drawString("there must be piture#"+imgPosition+"", 20, 20);
            g.drawImage(images[imgPosition], 0, 0, this);
        }
 
        // событие запуска активности апплета
        public void start(){
                setPaused(false);
        }
 
        // событие остановки активности апплета
        public void stop(){
                setPaused(true);
        }
 
        // деструктор апплета – очистить память выделенную под картинки
        public void destroy(){
                stopThread();
 
                for (int i = 0; i < images.length; i++){
                        images[i].flush();
                        images[i] = null;
                }
 
                images = null;
        }
 
    public boolean mouseDown(Event evt, int x, int y) {
        return true;
    }
 
    public boolean mouseUp(Event evt, int x, int y){
        return true;
    }
 
    public boolean mouseDrag(Event evt, int x, int y){
        return true;
    }
 
    public boolean mouseMove(Event evt, int x, int y){
        return true;
    }
 
    public boolean mouseEnter(Event evt, int x, int y){ //мышь в апплете
        startThread();
        start();
        return true;
    }
 
    public boolean mouseExit(Event evt, int x, int y){ // мышь вне апплета
        stopThread();
        stop();
        return true;
    }
} 


Автор: LSD 6.6.2014, 17:02
Проверь Java консоль на предмет ошибок, и добавь логгирование.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)