【问题标题】:Problem while running the j2me application运行 j2me 应用程序时出现问题
【发布时间】:2011-06-27 06:14:59
【问题描述】:

运行应用程序时,我无法查看模拟器中的任何内容。构建没有失败,我能够成功运行应用程序。当我关闭模拟器时,出现错误。我可以在这里提供代码和日志。

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


public class Login extends MIDlet implements CommandListener {
    TextField ItemName=null;
    TextField ItemNo=null;
    TextField UserName=null;
    TextField Password=null;
    Form authForm,mainscreen;
    TextBox t = null;
    StringBuffer b = new StringBuffer();
    private Display myDisplay = null;
    private Command okCommand = new Command("Login", Command.OK, 1);
    private Command exitCommand = new Command("Exit", Command.EXIT, 2);
    private Command sendCommand = new Command("Send", Command.OK, 1);
    private Command backCommand = new Command("Back", Command.BACK, 2);
    private Alert alert = null;

    public Login() {
        ItemName=new TextField("Item Name","",10,TextField.ANY);
        ItemNo=new TextField("Item No","",10,TextField.ANY);
        myDisplay = Display.getDisplay(this);
    UserName=new TextField("Your Name","",10,TextField.ANY);
    Password=new TextField("Password","",10,TextField.PASSWORD);
    authForm=new Form("Identification");
    mainscreen=new Form("Logging IN");
        mainscreen.addCommand(sendCommand);
    mainscreen.addCommand(backCommand);
    authForm.append(UserName);
    authForm.append(Password);
    authForm.addCommand(okCommand);
    authForm.addCommand(exitCommand);
    authForm.setCommandListener(this);
    myDisplay.setCurrent(authForm);
    }

    public void startApp() throws MIDletStateChangeException {
    }

    public void pauseApp() {
    }



    protected void destroyApp(boolean unconditional)
            throws MIDletStateChangeException {
    }


    public void commandAction(Command c, Displayable d) {

        if ((c == okCommand) && (d == authForm)) {
    if (UserName.getString().equals("") || Password.getString().equals("")){
        alert = new Alert("Error", "You should enter Username and Password", null, AlertType.ERROR);
        alert.setTimeout(Alert.FOREVER);
        myDisplay.setCurrent(alert);
    }
    else{
    //myDisplay.setCurrent(mainscreen);
    login(UserName.getString(),Password.getString());
    }
    }
        if ((c == backCommand) && (d == mainscreen)) {
        myDisplay.setCurrent(authForm);
    }
    if ((c == exitCommand) && (d == authForm)) {
        notifyDestroyed();
    }
        if ((c == sendCommand) && (d == mainscreen)) {
            if(ItemName.getString().equals("") || ItemNo.getString().equals("")){

            }
            else{
        sendItem(ItemName.getString(),ItemNo.getString());
            }
    }
    }



        public void login(String UserName,String PassWord) {
    HttpConnection connection=null;
    DataInputStream in=null;
    String url="http://olario.net/submitpost/submitpost/login.php";

    OutputStream out=null;
    try
    {
        connection=(HttpConnection)Connector.open(url);
        connection.setRequestMethod(HttpConnection.POST);
        connection.setRequestProperty("IF-Modified-Since", "2 Oct 2002 15:10:15 GMT");
        connection.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
        connection.setRequestProperty("Content-Language", "en-CA");
        connection.setRequestProperty("Content-Length",""+ (UserName.length()+PassWord.length()));
        connection.setRequestProperty("username",UserName);
        connection.setRequestProperty("password",PassWord);
    out = connection.openDataOutputStream();
    out.flush();
    in = connection.openDataInputStream();
    int ch;
    while((ch = in.read()) != -1) {
        b.append((char) ch);
        //System.out.println((char)ch);
    }
    //t = new TextBox("Reply",b.toString(),1024,0);
    //mainscreen.append(b.toString());
    String auth=b.toString();
    if(in!=null)
        in.close();
    if(out!=null)
        out.close();
    if(connection!=null)
        connection.close();

    if(auth.equals("ok")){
                mainscreen.setCommandListener(this);
        myDisplay.setCurrent(mainscreen);

    }
        }
    catch(IOException x){

        }


        }


       public void sendItem(String itemname,String itemno){
           HttpConnection connection=null;
    DataInputStream in=null;
    String url="http://www.olario.net/submitpost/submitpost/submitPost.php";

    OutputStream out=null;
    try
    {
        connection=(HttpConnection)Connector.open(url);
        connection.setRequestMethod(HttpConnection.POST);
        connection.setRequestProperty("IF-Modified-Since", "2 Oct 2002 15:10:15 GMT");
        connection.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
        connection.setRequestProperty("Content-Language", "en-CA");
        connection.setRequestProperty("Content-Length",""+ (itemname.length()+itemno.length()));
        connection.setRequestProperty("itemCode",itemname);
        connection.setRequestProperty("qty",itemno);
    out = connection.openDataOutputStream();
    out.flush();
    in = connection.openDataInputStream();
    int ch;
    while((ch = in.read()) != -1) {
        b.append((char) ch);
        //System.out.println((char)ch);
    }
    //t = new TextBox("Reply",b.toString(),1024,0);
    //mainscreen.append(b.toString());
    String send=b.toString();
    if(in!=null)
        in.close();
    if(out!=null)
        out.close();
    if(connection!=null)
        connection.close();

    if(send.equals("added")){
                alert = new Alert("Error", "Send Successfully", null, AlertType.INFO);
        alert.setTimeout(Alert.FOREVER);
        myDisplay.setCurrent(alert);

    }
        }
    catch(IOException x){

        }

       }
} 

日志是

pre-init:
pre-load-properties:
exists.config.active:
exists.netbeans.user:
exists.user.properties.file:
load-properties:
exists.platform.active:
exists.platform.configuration:
exists.platform.profile:
basic-init:
cldc-pre-init:
cldc-init:
cdc-init:
ricoh-pre-init:
ricoh-init:
semc-pre-init:
semc-init:
savaje-pre-init:
savaje-init:
sjmc-pre-init:
sjmc-init:
ojec-pre-init:
ojec-init:
cdc-hi-pre-init:
cdc-hi-init:
nokiaS80-pre-init:
nokiaS80-init:
nsicom-pre-init:
nsicom-init:
post-init:
init:
conditional-clean-init:
conditional-clean:
deps-jar:
pre-preprocess:
do-preprocess:
Pre-processing 0 file(s) into /home/sreekumar/NetBeansProjects/Login/build/preprocessed directory.
post-preprocess:
preprocess:
pre-compile:
extract-libs:
do-compile:
post-compile:
compile:
pre-obfuscate:
proguard-init:
skip-obfuscation:
proguard:
post-obfuscate:
obfuscate:
lwuit-build:
pre-preverify:
do-preverify:
post-preverify:
preverify:
pre-jar:
set-password-init:
set-keystore-password:
set-alias-password:
set-password:
create-jad:
add-configuration:
add-profile:
do-extra-libs:
nokiaS80-prepare-j9:
nokiaS80-prepare-manifest:
nokiaS80-prepare-manifest-no-icon:
nokiaS80-create-manifest:
jad-jsr211-properties.check:
jad-jsr211-properties:
semc-build-j9:
do-jar:
nsicom-create-manifest:
do-jar-no-manifest:
update-jad:
Updating application descriptor: /home/sreekumar/NetBeansProjects/Login/dist/Login.jad
Generated "/home/sreekumar/NetBeansProjects/Login/dist/Login.jar" is 3501 bytes.
sign-jar:
ricoh-init-dalp:
ricoh-add-app-icon:
ricoh-build-dalp-with-icon:
ricoh-build-dalp-without-icon:
ricoh-build-dalp:
savaje-prepare-icon:
savaje-build-jnlp:
post-jar:
jar:
pre-run:
netmon.check:
open-netmon:
cldc-run:
Copying 1 file to /home/sreekumar/NetBeansProjects/Login/dist/nbrun4244989945642509378
Copying 1 file to /home/sreekumar/NetBeansProjects/Login/dist/nbrun4244989945642509378
Jad URL for OTA execution: http://localhost:8082/servlet/org.netbeans.modules.mobility.project.jam.JAMServlet//home/sreekumar/NetBeansProjects/Login/dist//Login.jad
Starting emulator in execution mode
Running with storage root /home/sreekumar/j2mewtk/2.5.2/appdb/temp.DefaultColorPhone1
/home/sreekumar/NetBeansProjects/Login/nbproject/build-impl.xml:915: Execution failed with error code 143.
BUILD FAILED (total time: 35 seconds) 

【问题讨论】:

    标签: java java-me emulation


    【解决方案1】:

    我认为这与编码无关。如果同一模拟器皮肤的多个实例同时运行,则该工具包会为每个实例生成唯一的文件路径。例如,在 Windows 上,DefaultColorPhone 实例的文件路径名称可能为 workdir\appdb\temp.DefaultColorPhone1、workdir\appdb\temp.DefaultColorPhone2,等等。

    解决方案:文件 workdir\appdb\DefaultColorPhone\in.use 跟踪标记为正在使用的存储根的数量。如果模拟器崩溃,需要删除in.use文件

    【讨论】:

      【解决方案2】:

      您正在构造函数中调用 Display.getDisplay(this)。建议在 startApp() 中调用它。所以尝试将显示代码移动到 startApp() 中。

         public void startApp() throws MIDletStateChangeException { 
         myDisplay= Display.getDisplay(this); 
         myDisplay.setCurrent(authForm); 
         }
      

      您还在 commandAction 函数中调用 login()。此代码在系统线程上运行,建议快速返回。您的 login() 调用将阻止该线程。您应该在单独的线程中运行 login(),因为它会阻止等待您的服务器响应。创建一个单独的实现 Runnable 的类,为它提供用户名和密码的字符串。在构造函数中传入 midlet。将 login() 代码放在 run() 方法中。传入所需的用户名和密码后,您可以从 commandAction 内部启动线程。当您从服务器获取结果时,回调到您的 midlet 以更新显示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-03
        • 2021-06-11
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多