ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java访问类外的公共变量,SecurityException:MIDlet不是由createMIDlet构造的

2019-06-13 15:48:01  阅读:228  来源: 互联网

标签:java java-me lwuit midp


我是java的新手,我有一个小问题.我想从另一个类访问一个类中的变量.我有三个类,我希望能够访问主类中的变量以使我能够读取数组.

我得到的错误是

    java.lang.SecurityException: MIDlet not constructed by createMIDlet

请参阅下面的示例.请记住,它们都在同一个包装中.

    package tungPackage;

    import com.sun.lwuit.*;
    import com.sun.lwuit.animations.CommonTransitions;
    import com.sun.lwuit.events.ActionEvent;
    import com.sun.lwuit.events.ActionListener;
    import javax.microedition.midlet.MIDlet;


    public class TungMidlet extends MIDlet implements ActionListener {
    private Command       back                = new Command("Back");
    private Command       ok                  = new Command("Ok");

    public ActionListener commandlistListener = new ActionListener() {
        public void actionPerformed(ActionEvent cmd) {

            // check which command cliked
            if (cmd.getCommand() == back) {

                // go back to previous form
                mainForm.show();
            } else if (cmd.getCommand() == ok) {

                // go forward
            }
        }
    };

    private List              list;
    private Form              mainForm;
    private Label             promptLabel;

    private housesClass houseClassObject = new housesClass();

    public int counter; //this is the variable I want to access in a class called calculate class object.

    private int sumAmmt;

    public TungMidlet tungMidletObject;
    public calculateClass calculateClassObject;



    public TungMidlet() {
        Display.init(this);
    }
    private ActionListener applistListener = new ActionListener() {
        public void actionPerformed(ActionEvent ae) {

            if(list.getSelectedIndex()==0){

                counter++;

                if (counter>5)
                {
                    //check sum price.
                    sumAmmt = calculateClassObject.calculateSum();
                    Dialog x = new Dialog("info");
                    Label label = new Label("Maximum reached.");
                    Label label2 = new Label("Sum ammt = "+sumAmmt);
                    x.addComponent(label);
                    x.addComponent(label2);
                    x.addCommand(ok);
                    x.show();
                }
                else

                {
                    //calculate the price
                    String info = houseClassObject.randomHouse();
                    Dialog x = new Dialog("info");
                    Label label = new Label(info);
                    x.addComponent(label);
                    x.addCommand(ok);
                    x.show();
                }

            }
        }
    };


    public void startApp() {
      //calculateClassObject = new calculateClass();

       //sumAmmt = calculateClassObject.calculate(sumAmmt);

        mainForm     = new Form("Investment Categories");
        promptLabel = new Label("choose category");

        list = new List();
        list.addItem("House");
        list.addItem("Cars");
        list.addItem("Schools");
        list.addItem("Schools");
        list.addItem("Supermarkets");
        list.addItem("Stocks");
        list.addItem("Land");

        list.addActionListener(applistListener);

        mainForm.addComponent(promptLabel);
        mainForm.addComponent(list);
        mainForm.addCommand(back);
        mainForm.addCommandListener(commandlistListener);
        mainForm.setTransitionInAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL, true, 1000));
        mainForm.show();
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}


    public void actionPerformed(ActionEvent ae) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    }

我想要使​​用“计数器”变量访问的类如下所示.

    package tungPackage;

     import java.util.Random;


     public class housesClass {
     public Random   generator  = new Random();
     public String[] houseArray = new String[5];
     public housesClass housesClassObject;

     public calculateClass calcobj;// = new calculateClass();

     public housesClass()
        {
        }

     public String randomHouse() {

       housesClassObject = new housesClass();

        houseArray[0] = "Bungalow - 20,000,000 Shillings";
        houseArray[1] = "Microhouse - 10,000,000 Shillings";
        houseArray[2] = "Flat - 200,000,000 shillings";
        houseArray[3] = "Garage apartment  - 7,000,000 shillings";
        houseArray[4] = "Studio apartment  - 13,000,000 shillings";

        int rnd = generator.nextInt(houseArray.length);

        housesClassObject.housePrices(rnd);///noma

        String house = houseArray[rnd];

        return house;
    }
     void housePrices(int houseNumber) {
     calcobj = new calculateClass();
     TungMidlet tungmidobj = new TungMidlet();
     int counter = tungmidobj.counter;
     int[] housePriceArray = new int[5];
     housePriceArray[0] = 20000000;
     housePriceArray[1] = 10000000;
     housePriceArray[2] = 200000000;
     housePriceArray[3] = 7000000;
     housePriceArray[4] = 13000000;

     int price = housePriceArray[houseNumber];

     calcobj.storePrice(counter,price);
    }
    }

另一个支持类如下所示.

     package tungPackage;

     public class calculateClass {
     int[] storeArray = new int[5];



     public calculateClass()
     { 
     }

     public void storePrice(int counter, int number2)
     {
     storeArray[counter] = number2;      
     }

    public int calculateSum()
    {
            int sum =0;

           for(int i=1; i<6; i++){
              sum= sum+storeArray[i];
         }
           return sum;
     }
    }

解决方法:

>删除TungMidlet构造函数.如果在那里有一些有用的东西,你也可以声明它受到保护 – 但是你的代码片段不是这种情况,见下文.
无论您何时尝试直接调用该构造函数,请删除执行此操作的代码并找到另一种方法来执行您所需的操作.如果需要,请研究LWUIT Tutorial – Introduction中提供的代码示例,了解LWUIT中的典型事项.
>在startApp方法的开头放置语句Display.init(),
就像在LWUIT Tutorial – Hello, LWUIT!示例代码中完成的那样

您获得SecurityException的原因是您直接调用TungMidlet构造函数.不要那样做.

> MIDP API documentation for MIDlet constructor州:

Throws:
SecurityException – unless the application management software is creating the MIDlet.

标签:java,java-me,lwuit,midp
来源: https://codeday.me/bug/20190613/1233717.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有