Нужно создать апплет в окне которого выводится ряд подготовленных изображений. Изображения меняются когда курсор находится в апплете. Проблема с загрузкой. Не загружает и все.| Код | 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; } }
|
|