运行j2me应用程序时出现问题

时间:2011-06-27 06:15:00

标签: java java-me emulation

运行应用程序时,我无法在模拟器中查看任何内容。 Build没有失败,我可以成功运行应用程序。当我关闭模拟器时,我收到一个错误。我可以在这里提供代码和日志。

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) 

2 个答案:

答案 0 :(得分:1)

我认为这不是编码相关的问题。如果同一个仿真器外观的多个实例同时运行,则工具包会为每个实例生成唯一的文件路径。例如,在Windows上,DefaultColorPhone实例的文件路径名可能为workdir \ appdb \ temp.DefaultColorPhone1,workdir \ appdb \ temp.DefaultColorPhone2,等等。

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

答案 1 :(得分:0)

您正在构造函数中调用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以更新显示时。