3

重複の可能性:
クラスパスの実行時例外で、LWUIT の前にプラットフォーム ポートを含める必要があります。

J2MEでLWUITを使い始めたばかりです。LWUIT については詳しくありませんが、J2ME についてはよく知っています。J2ME プロジェクトに LWUIT のライブラリを追加しました。コンパイルは正常に行われますが、実行時に以下の例外が表示されます。

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();
        }
  }
}
4

1 に答える 1

2

その投稿を見ましたか?クラスパスの実行時例外で、LWUIT の前にプラットフォーム ポートを含める必要があります。

これも似たような問題だと思います。上記の質問の回答で示唆されているように、解決してみてください。

問題は、UI jar に含めていたことです。LWUIT には の 2 つの「セット」が付属していUI.jarます。LWUIT\UI フォルダにある一般的なものと、LWUIT\Ports フォルダにあるプラットフォーム固有のものです。一般的なものは、すべての共通コードを含む「親」プロジェクトとして使用されていますが、.jar ファイルをインポートする必要がある場合これはあなたのプラットフォーム用です。readme ファイルには次のように記載されています。

これらのプロジェクトは簡単にコンパイルできますが、プラットフォームをバインドする接着剤が含まれていないため、どのような目的にも役に立ちません。プラットフォームを使用するには、特定のプラットフォームの特定のポート ディレクトリの下にある適切なプロジェクトを使用する必要があります。

Transitions3D.java ファイルを削除するためにライブラリを再コンパイルしているときに、汎用の UI.jar を再コンパイル (およびインポート) しました。正しいことは、親プロジェクト(汎用UI.jar)をコンパイルしてから、ポート固有のライブラリ(私の場合はLWUIT\ports\MIDP\UI.jar)をコンパイルしてから、プロジェクトにインポートすることです。これで完了です.

于 2012-02-14T09:21:51.167 に答える