Вы должны указать порт платформы перед LWUIT в пути к классам: как решить эту исключительную ситуацию во время выполнения?

Возможный дубликат:
Вы должны указать порт платформы перед LWUIT в исключении времени выполнения пути к классам

Я только сейчас начал использовать LWUIT в J2ME. У меня нет дополнительных знаний о LWUIT, но я лучше знаю J2ME. Я добавил библиотеку LWUIT в свой проект J2ME, она компилируется нормально, но во время выполнения отображается следующее исключение:

java.lang.RuntimeException: You must include the platform port before the LWUIT in the classpath
    at com.sun.lwuit.impl.ImplementationFactory.createImplementation(ImplementationFactory.java:67)
    at com.sun.lwuit.Display.init(Display.java:406)
    at HelloMidlet.<init>(HelloMidlet.java:26)
    at java.lang.Class.newInstance(), bci=0
    at com.sun.midp.main.CldcMIDletLoader.newInstance(), bci=46
    at com.sun.midp.midlet.MIDletStateHandler.createMIDlet(), bci=66
    at com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet(), bci=17
    at com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=27
    at com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
    at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
    at com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
    at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26

Как решить эту проблему?

Ниже мой код:

import com.sun.lwuit.*;
import com.sun.lwuit.animations.CommonTransitions;
import com.sun.lwuit.animations.Transition3D;
import com.sun.lwuit.events.*;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.layouts.BoxLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import java.io.IOException;

public class HelloMidlet extends MIDlet implements ActionListener {
    private Form form1;
    private Form form2;

    private Command cmdRotate = new Command("Rotate");
    private Command cmdSlide = new Command("Slide");
    private Command cmdExit = new Command("Exit");
        public HelloMidlet(){
            Display.init(this);
        }
  public void startApp() {
        Resources r;
        try{
            r=Resources.open("/TimelineTheme.res");
            UIManager.getInstance().setThemeProps(r.getTheme("LWUITDefault"));
        }catch (IOException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        form1 = new Form("Form 1");
        form1.setLayout(new BorderLayout());
        form1.addComponent(BorderLayout.NORTH, new Label("My First Form"));
        form1.addComponent(BorderLayout.WEST, new Label("WEST"));
        form1.addComponent(BorderLayout.CENTER, new Label("CENTER"));
        form1.addComponent(BorderLayout.EAST, new Label("EAST"));
        form1.addComponent(BorderLayout.SOUTH, new Label("Click Rotate"));
        form1.addCommand(cmdRotate);
        form1.addCommand(cmdExit);
        form1.addCommandListener(this);
        form1.setTransitionInAnimator(CommonTransitions.createSlide(
                    CommonTransitions.SLIDE_HORIZONTAL, true, 1000));

        //Setup Form 2
        form2 = new Form("Form 2");
        form2.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        form2.addComponent(0,null,new Label("This is the second Form"));
        form2.addCommand(cmdSlide);
        form2.addCommand(cmdExit);
        form2.addCommandListener(this);
        form2.setTransitionInAnimator(Transition3D.createCube(1000, true));

        form1.show();
  }

  public void pauseApp() {}

  public void destroyApp(boolean unconditional) {}

  public void actionPerformed(ActionEvent ae) {
   if (ae.getCommand()==cmdExit) {
            notifyDestroyed();
        } else if (ae.getCommand()==cmdRotate) {
            form2.show();
        } else if (ae.getCommand()==cmdSlide) {
            form1.show();
        }
  }
}

person Mr. Sajid Shaikh    schedule 14.02.2012    source источник
comment
Я думаю, что код мидлета не нужен для решения проблемы. Вместо этого опубликуйте свой файл project.properties, в частности, свойство libs.classpath может быть полезным.   -  person mdelolmo    schedule 14.02.2012


Ответы (1)


Вы видели тот пост? Вы должны включить порт платформы перед LWUIT в исключении времени выполнения пути к классам

Я думаю, что это аналогичная проблема. Попробуйте решить ее, как предложено в ответе на вопрос выше:

Проблема заключалась в том, что в банке пользовательского интерфейса я включал. LWUIT поставляется с 2 «наборами» UI.jar. Общий, который находится в папке LWUIT\UI, и специфичные для платформы, которые находятся в папке LWUIT\Ports. Общий используется как «родительский» проект, содержащий весь общий код, однако, если вы ДОЛЖНЫ импортировать файл .jar который для вашей платформы. Как говорится в файле readme:

Хотя эти проекты будут легко компилироваться, они будут бесполезны для любых целей, поскольку они не включают связующий клей для платформы, чтобы использовать платформу, необходимо использовать соответствующие проекты в каталоге конкретных портов для данной платформы.

Пока я перекомпилировал библиотеку, чтобы удалить файл Transitions3D.java, я перекомпилировал (а затем импортировал) универсальный UI.jar. Правильнее всего скомпилировать родительский проект (общий UI.jar), ЗАТЕМ скомпилировать библиотеку для конкретного порта (в моем случае LWUIT\ports\MIDP\UI.jar), а затем импортировать ее в свой проект, и все готово. .

person Mun0n    schedule 14.02.2012
comment
Я ничего не понял от них, не могли бы вы объяснить мне, что он им сказал? - person Mr. Sajid Shaikh; 14.02.2012
comment
Я загрузил последний zip-файл LWUIT, но в нем нет ни папки LWUIT\ports, ни файла UI.jar. Как я могу решить этот ответ? - person Mr. Sajid Shaikh; 14.02.2012
comment
Вы должны загрузить LWUIT 1.5 из SVN здесь: java.net/projects/lwuit/sources/svn /show Там вы можете найти порты пользовательского интерфейса - person Mun0n; 14.02.2012
comment
Используйте порт для конкретной платформы из каталога lib и убедитесь, что порт пользовательского интерфейса находится перед портом ввода-вывода. вам НЕ нужен UI.jar, поскольку его содержимое включено в порт для конкретной платформы. - person Shai Almog; 14.02.2012
comment
Можете ли вы предоставить мне ссылку для загрузки lwuit, который работает в netbean, или скажите мне, как скачать по этой ссылке (SVN) java.net/projects/lwuit/sources/svn/show - person Mr. Sajid Shaikh; 15.02.2012
comment
Вам необходимо установить SVN на свой компьютер. Вам понадобится этот tortoisesvn.net/downloads.html . Когда у вас установлен Tortoise svn, вы должны выполнить Checkout из сети LWUIT SVN, которую я дал вам ранее. Для получения дополнительной информации об управлении версиями en.wikipedia.org/wiki/Revision_control . Учебное пособие по Tortoise SVN youtube.com/watch?v=4yola1Q9KEQ - person Mun0n; 15.02.2012