2012-09-14 58 views
2

我已經問過這個了,但我需要更多的知識。我正嘗試使用按鈕命令將兩個類連接在一起。我在這裏跟上了最後一個答案,但是當我分開課程時,它不起作用。我用b2Command來觸發事件。這裏是我的代碼:J2ME setCurrent()

MainMidlet.java

/* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */ 

import javax.microedition.midlet.*; 
import javax.microedition.lcdui.*; 
import javax.microedition.lcdui.StringItem; 
import javax.microedition.lcdui.Command; 
import javax.microedition.lcdui.Displayable; 
import javax.microedition.lcdui.Display; 

/** 
* @author bon 
*/ 
public class MainMidlet extends MIDlet implements CommandListener, 
ItemCommandListener, ItemStateListener{ 
private Display display; 
private Form form; 
private Command okCommand, backCommand, exitCommand, b1Command, b2Command, exCommand, boutCommand; 
private StringItem b1stringItem, b2stringItem, boutstringItem, exstringItem; 

public AddCalendarEvent addcalendarevent; 

public MainMidlet(){ 
    okCommand = new Command ("OK", Command.OK, 1); 
    exitCommand = new Command ("EXIT", Command.EXIT, 1); 
    backCommand = new Command ("BACK", Command.BACK, 1); 
    b1Command = new Command ("BUTTON", Command.ITEM, 2); 
    b2Command = new Command ("BUTTON", Command.ITEM, 2); 
    exCommand = new Command ("BUTTON", Command.ITEM, 2); 
    boutCommand = new Command ("BUTTON", Command.ITEM, 2); 

    form = new Form ("CyberMe"); 

    b1stringItem = new StringItem (null, "Make Todo", Item.BUTTON); 
    b1stringItem.setItemCommandListener (this); 
    b1stringItem.setDefaultCommand (b1Command); 

    b2stringItem = new StringItem (null, "Set Alarm", Item.BUTTON); 
    b2stringItem.setItemCommandListener (this); 
    b2stringItem.setDefaultCommand (b2Command); 

    boutstringItem = new StringItem (null, "About", Item.BUTTON); 
    boutstringItem.setItemCommandListener (this); 
    boutstringItem.setDefaultCommand (boutCommand); 

    exstringItem = new StringItem (null, "Exit", Item.BUTTON); 
    exstringItem.setItemCommandListener (this); 
    exstringItem.setDefaultCommand (exCommand); 

    form.append ("Any Appointment?"); 
    form.append (b1stringItem); 
    form.append (b2stringItem); 
    form.append (boutstringItem); 
    form.append (exstringItem); 

    form.addCommand (okCommand); 
    form.addCommand (exitCommand); 
    form.setCommandListener (this); 
} 

public void startApp() { 
    display = Display.getDisplay(this); 
    display.setCurrent(form); 
} 

public void pauseApp() { 
} 

public void destroyApp(boolean unconditional) { 
} 

public void commandAction(Command c, Displayable d) { 
    throw new UnsupportedOperationException("Not supported yet."); 
} 

public void commandAction(Command c, Item item) { 

if (c == b1Command) { 
//display.setCurrent(); 
} 
else if (c == b2Command){ 
    addcalendarevent = new AddCalendarEvent(this); 
    display.setCurrent(addcalendarevent); 
} 
else if (c == exCommand){ 
destroyApp(false); 
notifyDestroyed(); 
} 
//else if (c == boutCommand) 
//display.setCurrent(); 
} 

public void itemStateChanged(Item item) { 
    throw new UnsupportedOperationException("Not supported yet."); 
} 
} 

這裏就是我試圖鏈接: AddCalendarEvent.java

 /* 
     * To change this template, choose Tools | Templates 
     * and open the template in the editor. 
     */ 
     import javax.microedition.midlet.MIDlet; 
     import javax.microedition.lcdui.Displayable; 
     import javax.microedition.lcdui.Display; 
     import javax.microedition.lcdui.Form; 
     import javax.microedition.lcdui.CommandListener; 
     import javax.microedition.lcdui.TextField; 
     import javax.microedition.lcdui.DateField; 
     import javax.microedition.lcdui.Command; 
     import javax.microedition.lcdui.Alert; 

     import javax.microedition.pim.PIM; 
     import javax.microedition.pim.PIMItem; 
     import javax.microedition.pim.EventList; 
     import javax.microedition.pim.Event; 
     import javax.microedition.pim.PIMException; 

     import java.util.Date; 
     /** 
     * 
     * @author bon 
     */ 
     public class AddCalendarEvent extends MainMidlet{ 
      private Display display; 
      // Form where user can enter data of new event. 
      private Form addEventForm; 

      // Command for adding event to list of events. Placed on addEventForm. 
      private Command cmdAddEvent; 
      // Command for exiting from application. Placed on addEventForm. 
      private Command cmdExit; 

      // Text field for summary of event. 
      private TextField summaryField; 
      // Date field for start data of event. 
      private DateField startDateField; 
      // Date field for end data of event. 
      private DateField endDateField; 
      // Text field for note of event. 
      private TextField noteField; 
      // Text field for location of event. 
      private TextField locationField; 

      /** 
      * Constructor. 
      */  
      public AddCalendarEvent() { 
       if(checkPIMSupport() == false) { 
        exitMIDlet(); 
       } 

       initializeComponents(); 
      } 

      /** 
      * Initializes components of midlet. 
      */  
      public void initializeComponents() { 
       display = Display.getDisplay(this); 

       // Create form for adding event. 
       addEventForm = new Form("Add event"); 

       // Add commands to form and set listener for it. 
       cmdAddEvent = new Command("Add event", Command.SCREEN, 0); 
       addEventForm.addCommand(cmdAddEvent); 

       cmdExit = new Command("Exit", Command.EXIT, 0); 
       addEventForm.addCommand(cmdExit); 

       addEventForm.setCommandListener(this);   

       try { 
        // Get list of events. 
        EventList eventList = (EventList)PIM.getInstance().openPIMList(
          PIM.EVENT_LIST, PIM.READ_WRITE); 

        // Create controls based on supported fields for event. 
        if(eventList.isSupportedField(Event.SUMMARY) == true) { 
         summaryField = new TextField("Summary", null, 20, 
                TextField.ANY); 
         addEventForm.append(summaryField); 
        } else { 
         // At least "summary" field must be supported. 
         // If not, throw exception. 
         eventList.close(); 
         throw new Exception("Summary field is not supported"); 
        } 

        if(eventList.isSupportedField(Event.START) == true) { 
         startDateField = new DateField("Start date", 
                DateField.DATE_TIME); 
         startDateField.setDate(new Date()); 
         addEventForm.append(startDateField); 
        } 

        if(eventList.isSupportedField(Event.END) == true) { 
         endDateField = new DateField("End date", DateField.DATE_TIME); 
         endDateField.setDate(new Date()); 
         addEventForm.append(endDateField); 
        } 

        if(eventList.isSupportedField(Event.NOTE) == true) { 
         noteField = new TextField("Note", null, 20, TextField.ANY); 
         addEventForm.append(noteField); 
        } 

        if(eventList.isSupportedField(Event.LOCATION) == true) { 
         locationField = new TextField("Location", null, 20, 
                TextField.ANY); 
         addEventForm.append(locationField); 
        }    

        // Close list of events. 
        eventList.close(); 

       } catch(PIMException pimExc) { 
        // TODO: Handle error on working with PIM. 
       } 
       catch(SecurityException secExc) { 
        // TODO: Handle error on access to PIM. 
       } 
       catch(Exception exc) { 
        // If unknown error was catched, exit from application. 
        exitMIDlet(); 
       } 
      } 

      /** 
      * Checks PIM support. 
      * @return - true if PIM is supported, false otherwise. 
      */  
      private boolean checkPIMSupport() { 
       String propValue = System.getProperty("microedition.pim.version"); 
       if(propValue != null) { 
        return true; 
       } else { 
        return false; 
       } 
      } 

      /** 
      * Adds event to list of events. 
      * Gets data for event from addEventForm controls. 
      */ 
      private void addEvent() { 
       try { 
        // Get list of events. 
        EventList eventList = (EventList)PIM.getInstance().openPIMList(
          PIM.EVENT_LIST, PIM.READ_WRITE);    

        // Create new event. 
        Event event = eventList.createEvent(); 

        // Get data from controls 
        if(eventList.isSupportedField(Event.SUMMARY) == true) { 
         String summary = summaryField.getString(); 
         event.addString(Event.SUMMARY, PIMItem.ATTR_NONE, summary); 
        } else { 
         // At least summary must be supported. 
         eventList.close(); 
         throw new Exception("Summary field for event is not supported"); 
        } 

        if(eventList.isSupportedField(Event.START) == true) { 
         long startDate = startDateField.getDate().getTime(); 
         event.addDate(Event.START, PIMItem.ATTR_NONE, startDate); 
        } 

        if(eventList.isSupportedField(Event.END) == true) { 
         long endDate = endDateField.getDate().getTime(); 
         event.addDate(Event.END, PIMItem.ATTR_NONE, endDate); 
        } 

        if(eventList.isSupportedField(Event.NOTE) == true) { 
         String note = noteField.getString(); 
         event.addString(Event.NOTE, PIMItem.ATTR_NONE, note); 
        } 

        if(eventList.isSupportedField(Event.LOCATION) == true) { 
         String location = locationField.getString(); 
         event.addString(Event.LOCATION, PIMItem.ATTR_NONE, location); 
        }  

        // Commit event. 
        event.commit(); 
        // Close list of events. 
        eventList.close(); 

        // Notify user that event was added 
        showAlert("Info", "Event was successfully added."); 

       } catch(PIMException pimExc) { 
        // TODO: Handle error on working with PIM. 
        showAlert("PIMException", pimExc.getMessage()); 
       } 
       catch(SecurityException secExc) { 
        // TODO: Handle error on access to PIM. 
        showAlert("SecurityException", secExc.getMessage()); 
       } 
       catch(Exception exc) { 
        // TODO: Handle all other errors. 
        showAlert("Exception", exc.getMessage()); 
       } 
      } 

      /** 
      * Shows alert with specified title and text. 
      * @param title - Title of alert. 
      * @param message - text of alert. 
      */ 
      private void showAlert(String title, String message) { 
       Alert alert = new Alert(title); 
       alert.setString(message); 
       alert.setTimeout(Alert.FOREVER); 
       display.setCurrent(alert); 
      } 

      private void exitMIDlet() { 
       notifyDestroyed(); 
      } 

      public void commandAction(Command command, Displayable displayable) { 
       if(command == cmdAddEvent) { 
        addEvent(); 
       } 

       if(command == cmdExit) { 
        exitMIDlet(); 
       } 
      } 
     } 

回答

3

嘗試了這一點,

//定義您MainMidlet類中的公共靜態方法

private static Display display; // declare static Display variable. 

public static Display getDisplay() 
{ 
    return display; 
} 

現在從AddCalendarEvent類訪問該方法如下,

private void showAlert(String title, String message) 
{ 
    Alert alert = new Alert(title); 
    alert.setString(message); 
    alert.setTimeout(Alert.FOREVER); 
    MainMidlet.getDisplay().setCurrent(alert); // this line has been changed 
} 
+0

嗨! '返回顯示器上出現紅線錯誤;'它表示非靜態變量顯示。我該怎麼辦? – drayl

+1

@drayl,我更新了我的答案,請檢查它。 – Lucifer