LWUIT 和 kXML 解析器

发布于 2024-09-15 03:52:42 字数 6075 浏览 1 评论 0原文

Uncaught exception: java.lang.Error: Static initializer: java.lang.NullPointerException,   0
 - java.lang.Class.throwError(), bci=57
 - java.lang.Class.initialize(), bci=221
 - com.sun.lwuit.Component.<init>(), bci=5
 - com.sun.lwuit.Container.<init>(), bci=1
 - com.sun.lwuit.Form.<init>(), bci=8
 - com.sun.lwuit.Form.<init>(), bci=1
 - com.midlet.RSSMidlet.<init>(), bci=11
 - java.lang.Class.newInstance(), bci=0
 - com.sun.midp.main.CldcMIDletLoader.newInstance(), bci=46
 - com.sun.midp.midlet.MIDletStateHandler.createMIDlet(), bci=66
 - com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet(), bci=17
 - com.sun.midp.midlet.MIDletStateHandler.startMIDlet(), bci=9
 - com.sun.midp.midlet.MIDletStateHandler.startMIDlet(), bci=4
 - com.sun.midp.appmanager.SelectorBase.run(), bci=33
 - java.lang.Thread.run(), bci=11

编码:

package com.midlet;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.sun.lwuit.Command;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.animations.Transition3D;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
//import com.sun.lwuit.list.ListModel;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;

public class RSSMidlet extends MIDlet implements ActionListener{

    public Vector feedVector;
    public String rssFeed; 
    private Command cmdSelect;
    private Command cmdExit;

    private Form form1 = new Form("Feeds List");
//  private Form form2 = new Form("Feed Description");

//  private Vector feed_Title;
    private List resultList;
//  private List feedTitle;
    public RSSModel model = new RSSModel();

    class ReadXML extends Thread{

        public void run(){
            try{
                rssFeed = "http://www.rottentomatoes.com/syndication/rss/top_news.xml";
                HttpConnection httpConnection = (HttpConnection) Connector.open(rssFeed);
                KXmlParser parser = new KXmlParser();
                parser.setInput(new InputStreamReader(httpConnection.openInputStream()));

                parser.nextTag();
                parser.require(XmlPullParser.START_TAG, null, null);
                while(parser.nextTag() != XmlPullParser.END_TAG){
                    parser.nextTag();
                    parser.require(XmlPullParser.START_TAG, null, "channel");
                    readXMLData(parser);
                    parser.require(XmlPullParser.END_TAG, null, "channel");
                }
                parser.require(XmlPullParser.END_TAG, null, "rss");
                parser.next();
                parser.require(XmlPullParser.END_DOCUMENT, null, null);
            }catch(Exception e){

            }
        }
    }

    public RSSMidlet() {
        // TODO Auto-generated constructor stub
        Display.init(this);
        Resources r;
        try{
            r = Resources.open("/LWUITtheme.res");
            UIManager.getInstance().setThemeProps(r.getTheme("LWUITDefault"));
        }catch(IOException e){
            //e.printStackTrace();
        }




        resultList = new List();
        for(int i=0; i<feedVector.size();i++){
            model = (RSSModel) feedVector.elementAt(i);
            resultList.addItem(model.getTitle().toString());
        }


        form1.addComponent(BorderLayout.CENTER,resultList);
        form1.addCommand(cmdExit);
        form1.addCommand(cmdSelect);
        form1.setScrollable(true);
        //form1.addCommandListener((ActionListener) this);
        form1.setTransitionInAnimator(Transition3D.createRotation(250, true));
        form1.show();
    }

    protected void destroyApp(boolean unconditional)
            throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub


        new ReadXML().start();
    }

    public void readXMLData(KXmlParser parser) throws IOException, XmlPullParserException{


        while(!"item".equals(parser.getName()) ){
            /** Check if document doesn't include any item tags */
            if( parser.next() == XmlPullParser.END_DOCUMENT )
                throw new IOException("No items in RSS feed!");
        }

        parser.require(XmlPullParser.START_TAG, null, "item");



        while(parser.nextTag() != XmlPullParser.END_TAG){

            parser.require(XmlPullParser.START_TAG, null, null);
            String name = parser.getName();
            String text = parser.nextText();
            //System.out.println ("<"+name+">"+text);

            if(name.equals("pubDate")){
                model.setPubDate(text);
            }else if(name.equals("title")){
                model.setTitle(text);
            }else if(name.equals("link")){
                model.setLink(text);
            }else if(name.equals("description")){
                model.setDescription(text);
            }
            parser.require(XmlPullParser.END_TAG, null, name);
        }
        feedVector.addElement(model);
        parser.require(XmlPullParser.END_TAG, null, "item");
    }

    public void actionPerformed(ActionEvent evt) {
        // TODO Auto-generated method stub
        if(evt.getCommand() == cmdExit){
            notifyDestroyed();
        }else if(evt.getCommand() == cmdSelect){

        }
    }
}

这是我的代码。我似乎无法让 LWUIT 使用 kXML 运行。有一篇论坛帖子说我需要在 Display.init(this) 行之后初始化图形对象。但那条线应该在哪里呢?请帮助我...

Uncaught exception: java.lang.Error: Static initializer: java.lang.NullPointerException,   0
 - java.lang.Class.throwError(), bci=57
 - java.lang.Class.initialize(), bci=221
 - com.sun.lwuit.Component.<init>(), bci=5
 - com.sun.lwuit.Container.<init>(), bci=1
 - com.sun.lwuit.Form.<init>(), bci=8
 - com.sun.lwuit.Form.<init>(), bci=1
 - com.midlet.RSSMidlet.<init>(), bci=11
 - java.lang.Class.newInstance(), bci=0
 - com.sun.midp.main.CldcMIDletLoader.newInstance(), bci=46
 - com.sun.midp.midlet.MIDletStateHandler.createMIDlet(), bci=66
 - com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet(), bci=17
 - com.sun.midp.midlet.MIDletStateHandler.startMIDlet(), bci=9
 - com.sun.midp.midlet.MIDletStateHandler.startMIDlet(), bci=4
 - com.sun.midp.appmanager.SelectorBase.run(), bci=33
 - java.lang.Thread.run(), bci=11

Coding:

package com.midlet;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.sun.lwuit.Command;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.animations.Transition3D;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
//import com.sun.lwuit.list.ListModel;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;

public class RSSMidlet extends MIDlet implements ActionListener{

    public Vector feedVector;
    public String rssFeed; 
    private Command cmdSelect;
    private Command cmdExit;

    private Form form1 = new Form("Feeds List");
//  private Form form2 = new Form("Feed Description");

//  private Vector feed_Title;
    private List resultList;
//  private List feedTitle;
    public RSSModel model = new RSSModel();

    class ReadXML extends Thread{

        public void run(){
            try{
                rssFeed = "http://www.rottentomatoes.com/syndication/rss/top_news.xml";
                HttpConnection httpConnection = (HttpConnection) Connector.open(rssFeed);
                KXmlParser parser = new KXmlParser();
                parser.setInput(new InputStreamReader(httpConnection.openInputStream()));

                parser.nextTag();
                parser.require(XmlPullParser.START_TAG, null, null);
                while(parser.nextTag() != XmlPullParser.END_TAG){
                    parser.nextTag();
                    parser.require(XmlPullParser.START_TAG, null, "channel");
                    readXMLData(parser);
                    parser.require(XmlPullParser.END_TAG, null, "channel");
                }
                parser.require(XmlPullParser.END_TAG, null, "rss");
                parser.next();
                parser.require(XmlPullParser.END_DOCUMENT, null, null);
            }catch(Exception e){

            }
        }
    }

    public RSSMidlet() {
        // TODO Auto-generated constructor stub
        Display.init(this);
        Resources r;
        try{
            r = Resources.open("/LWUITtheme.res");
            UIManager.getInstance().setThemeProps(r.getTheme("LWUITDefault"));
        }catch(IOException e){
            //e.printStackTrace();
        }




        resultList = new List();
        for(int i=0; i<feedVector.size();i++){
            model = (RSSModel) feedVector.elementAt(i);
            resultList.addItem(model.getTitle().toString());
        }


        form1.addComponent(BorderLayout.CENTER,resultList);
        form1.addCommand(cmdExit);
        form1.addCommand(cmdSelect);
        form1.setScrollable(true);
        //form1.addCommandListener((ActionListener) this);
        form1.setTransitionInAnimator(Transition3D.createRotation(250, true));
        form1.show();
    }

    protected void destroyApp(boolean unconditional)
            throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub


        new ReadXML().start();
    }

    public void readXMLData(KXmlParser parser) throws IOException, XmlPullParserException{


        while(!"item".equals(parser.getName()) ){
            /** Check if document doesn't include any item tags */
            if( parser.next() == XmlPullParser.END_DOCUMENT )
                throw new IOException("No items in RSS feed!");
        }

        parser.require(XmlPullParser.START_TAG, null, "item");



        while(parser.nextTag() != XmlPullParser.END_TAG){

            parser.require(XmlPullParser.START_TAG, null, null);
            String name = parser.getName();
            String text = parser.nextText();
            //System.out.println ("<"+name+">"+text);

            if(name.equals("pubDate")){
                model.setPubDate(text);
            }else if(name.equals("title")){
                model.setTitle(text);
            }else if(name.equals("link")){
                model.setLink(text);
            }else if(name.equals("description")){
                model.setDescription(text);
            }
            parser.require(XmlPullParser.END_TAG, null, name);
        }
        feedVector.addElement(model);
        parser.require(XmlPullParser.END_TAG, null, "item");
    }

    public void actionPerformed(ActionEvent evt) {
        // TODO Auto-generated method stub
        if(evt.getCommand() == cmdExit){
            notifyDestroyed();
        }else if(evt.getCommand() == cmdSelect){

        }
    }
}

This is my codes. I can't seem to get LWUIT running with kXML. There is a forum post that says that I need to initialize graphics objects after the Display.init(this) line. But where that line should lie? Please assist me...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如何视而不见 2024-09-22 03:52:42

Display.init(your_midlet) 负责初始化 LWUIT 的 Display,无需您自己执行。唯一的限制是,您必须在使用任何表单之前初始化显示。
将行移到

form1 = new Form("Feeds List")

该行之后,

Display.init(this);

以便在初始化显示后在构造函数中初始化表单!

The Display.init(your_midlet) is responsible for initializing the Display for LWUIT, no need to do it yourself. Only restriction is, you have to initialize the Display BEFORE you use any Form.
Move the line

form1 = new Form("Feeds List")

after the line

Display.init(this);

so you initialize the Form in the Constructor after initializing the Display!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文