Вопрос

У меня проблема с загрузкой изображения с помощью Java 2ME.У меня есть файл изображения «picture.png» на диске «C:».После этого я написал вот так, чтобы показать изображение из этого места.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;

public class ImageMidlet extends MIDlet implements CommandListener{
    private Display display;
    private Command exitCommand;
    private Command backCommand;
    private Command okCommand;
    private Form form;

    private ImageItem imageItem;
    private Image image;

    public ImageMidlet(){
        display = Display.getDisplay(this);
        form=new Form("");
        exitCommand = new Command("Exit", Command.EXIT, 1);
        backCommand = new Command("Back", Command.BACK, 2);
        okCommand = new Command("OK", Command.OK, 3);

        try {
            image=Image.createImage("/picture.png");
            imageItem=new ImageItem(null,image,ImageItem.LAYOUT_NEWLINE_BEFORE,"");
        }
        catch(IOException ex){

        }
        form.append(imageItem);
        form.addCommand(okCommand);
        form.addCommand(exitCommand);
        form.addCommand(backCommand);
        form.setCommandListener(this);

        display.setCurrent(form);

    }

    public void commandAction(Command c,Displayable d){

    }

    public void startApp() {
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}

Он показывает мне эту ошибку:

Unable to create MIDlet Test.ImageMidlet
java.lang.NullPointerException
     at javax.microedition.lcdui.Form.append(Form.java:638)
     at Test.ImageMidlet.<init>(ImageMidlet.java:39)
     at java.lang.Class.runCustomCode(+0)
     at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
     at com.sun.midp.midlet.Selector.run(Selector.java:151)

Я начинаю учиться развиваться, поэтому, пожалуйста, подскажите, как это сделать.

Это было полезно?

Решение

Как мселл сказал - Вы не можете получить доступ к изображениям со своего компьютера.Убедитесь, что вы включили данное изображение в jar-файл мидлета.Если вы попытаетесь получить к нему доступ с помощью «/picture.png», он должен находиться в корневом каталоге jar.

Другие советы

Image.createImage(имя строки) загружает данное изображение как ресурс.Ресурсы загружены Class.getResourceAsStream(имя), который ищет ресурсы из пути к классам, а не из корня вашей файловой системы.

Вам следует поместить файл изображения в свой путь к классам, который обычно является конечным файлом .jar приложения.Обычно папка называется Ресурсы или рез создается под проект, в котором размещаются изображения.Содержимое этой папки затем копируется в файл .jar.На этапе разработки у вас должна быть возможность добавить папку ресурсов в путь к классам с помощью параметра командной строки (ресурсы java -cp в Java SE) или с аналогичной настройкой IDE.

Если вы действительно заинтересованы в загрузке изображений из реальной файловой системы, вы можете использовать дополнительный API FileConnection (http://developers.sun.com/mobility/apis/articles/fileconnection/).Однако поддержка этого API на телефоне ограничена.Для статических изображений лучше всего использовать путь к классам.

Прежде всего поместите свое изображение в пакет по умолчанию.Я поместил «My Network Places.png» в пакет по умолчанию.Затем создайте Midlet с именем «ImageIteMexample», затем скопируйте ниже код в этом файле средней части.

import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ImageItemExample extends MIDlet implements CommandListener{
private Display display;
private Command exit;
private Form form;
private ImageItem logo;

public ImageItemExample(){
form = new Form("Image Item");
exit = new Command("Exit", Command.EXIT, 0);
try{
  logo = new ImageItem(null, Image.createImage("/My Network Places.png"),
   ImageItem.LAYOUT_CENTER | ImageItem.LAYOUT_NEWLINE_BEFORE |
    ImageItem.LAYOUT_NEWLINE_AFTER, "Roseindia");
  form.append(logo);
}catch(IOException e){
  form.append(new StringItem(null, "Roseindia: Image not available: "+ e));
}
}

public void startApp(){
display = Display.getDisplay(this);
form.addCommand(exit);
form.setCommandListener(this);
display.setCurrent(form);
}

public void pauseApp(){}

public void destroyApp(boolean unconditional){
notifyDestroyed();
}

public void commandAction(Command c, Displayable d){
String label = c.getLabel();
if(label.equals("Exit")){
  destroyApp(true);
}
}
}

Я предполагаю, что

image=Image.createImage("/picture.png");

выдает исключение, которое предотвращает создание нового объекта типа ImageItem, в результате чего ваша переменная imageItem остается нулевой.Это дает вам исключение нулевого указателя.

Разве твой файл не Изображение.png а не Picture.png?

Убедитесь, что файл картинка.png на самом деле существует

в зависимости от эмулятора/IDE устройства должен быть способ установить «HOME» каталог для устройства.В вашем случае это будет "C:\".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top