J2ME学习札记3

Ticker对象
发信站: 北大未名站 (2001年10月20日21:14:25 星期六) , 站内信件

 Ticker对象是一个项目类型的对象,它的作用相当于一个滚动消息栏,在屏幕的上方显示滚
动的信息。 Ticker类的构造函数仅有一个参数,那就是需要滚动显示的消息。
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ShowTicker extends MIDlet implements CommandListener
{
private Display display;
        private Form props;
 
private Command exitCommand = new Command("Exit", Command.EXIT, 1);

public ShowTicker()
{
display = Display.getDisplay(this);
         }

public void startApp()
{
props = new Form("Hello World");
props.append("Hello World!/n");
Ticker ticker=new Ticker("С¥һҹ
;Ìý´ºÓê");
props.setTicker(ticker);
props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
        }

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
       }

public void destroyApp(boolean unconditional)
{
        }

public void pauseApp()
{
display.setCurrent(null);
props = null;
        }

}
 ShowTicker.java程序的运行效果如下图所示:

获取文本框的值
发信站: 北大未名站 (2001年10月21日00:34:19 星期天) , 站内信件

 在前面的例子中,我们已经演示了如何构造J2ME程序的用户界面。现在有一个问题,那就是
如何与用户界面交互呢?亦即如何获取用户通过用户界面输入的值呢?请看下面的例子。
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class GetTextBoxValue extends MIDlet implements CommandListener
{
private Display display;
        private TextBox txtBox;
 
private Command exitCommand = new Command("Exit", Command.EXIT, 1);
private Command getCommand = new Command("GETVALUE", Command.OK, 1);

public GetTextBoxValue()
{
display = Display.getDisplay(this);
         }

public void startApp()
{
//or :
//String str="hello world";
//txtBox = new TextBox("Text Box",str,str.length(),0);
//the follow code is wrong:
//txtBox = new TextBox("Text Box",str,any number here,0);

txtBox = new TextBox("Text Box",null,200,0);

txtBox.addCommand(exitCommand);
txtBox.addCommand(getCommand);
txtBox.setCommandListener(this);
display.setCurrent(txtBox);
        }

public void valueScreen()
{
Form props=new Form("get text box value");
props.append(txtBox.getString());
props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
}

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
if(c==getCommand)
{
valueScreen();
}
        }

public void destroyApp(boolean unconditional)
{
        }

public void pauseApp()
{
display.setCurrent(null);
txtBox = null;
        }

}
 在上面的例子中(GetTextBoxValue.java),当我们往文本框中输入文本,并按下退出按钮,接
着选择GETVALUE命令的时候,将会调用valueScreen()方法。valueScreen()方法的源代码如下
:
public void valueScreen()
{
Form props=new Form("get text box value");
props.append(txtBox.getString());
props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
}
 valueScreen()方法的逻辑是:首先创建一个容器对象Form,然后调用TextBox对象的getStr
ing()方法,获取文本框中的输入值,追加到容器对象中,最后将此Form对象作为屏幕的当前显
示对象。GetTextBoxValue.java的运行效果如下面两图所示:

Date对象
发信站: 北大未名站 (2001年10月21日00:35:20 星期天) , 站内信件

 Date对象是属于java.util包的,它的作用是返回当前的时间。请看下面的代码:
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class GetDate extends MIDlet implements CommandListener
{
private Display display;
        private Form props;
private Date date;
 
private Command exitCommand = new Command("Exit", Command.EXIT, 1);

public GetDate()
{
display = Display.getDisplay(this);
        }

public void startApp()
{
props = new Form("Hello World");
props.append("Hello World!/n");
date=new Date();
props.append("Now Time:"+date.getTime()+"/n");

props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
        }

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
        }

public void destroyApp(boolean unconditional)
{
        }

public void pauseApp()
{
display.setCurrent(null);
props = null;
        }

}
 GetDate.java程序的运行效果如下图所示:


--
TimeZone对象
发信站: 北大未名站 (2001年10月21日00:36:16 星期天) , 站内信件

 TimeZone对象也是属于java.util包的。这个对象的作用是提供关于时区的信息。TimeZon
e类有一个静态方法----getDefault(),可以获取与当前系统相关的时区对象。getAvailable
IDs()方法可以获取系统中所有可用的时区的ID号,getID()方法可以获取系统当前所设置的时
区。具体的例子如下所示:
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class GetTimeZone extends MIDlet implements CommandListener
{
private Display display;
        private Form props;
//private Date date;
private TimeZone zone;
 
private Command exitCommand = new Command("Exit", Command.EXIT, 1);

public GetTimeZone()
{
display = Display.getDisplay(this);
        }

public void startApp()
{
props = new Form("Hello World");
props.append("Hello World!/n");
//date=new Date();
//props.append("Now Time:"+date.getTime()+"/n");
zone=TimeZone.getDefault();
String []zoneid=zone.getAvailableIDs();
for(int i=0;i<zoneid.length;i++)
{
props.append(zoneid[i]+"/n");
}
props.append("Current Time Zone:"+zone.getID()+"/n");
props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
        }

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
        }

public void destroyApp(boolean unconditional)
{
        }

public void pauseApp()
{
display.setCurrent(null);
props = null;
         }

}
 GetTimeZone.java程序的运行效果如下图所示:


--
Calendar对象
发信站: 北大未名站 (2001年10月21日00:37:43 星期天) , 站内信件

 Calendar对象归属于java.util包,它可以提供更为详尽的时间信息。具体的例子如下所示
:
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class GetCalendar extends MIDlet implements CommandListener
{
private Display display;
        private Form props;
//private Date date;
//private TimeZone zone;
//private Calendar calendar;

private Command exitCommand = new Command("Exit", Command.EXIT, 1);

public GetCalendar()
{
display = Display.getDisplay(this);
        }

public void startApp()
{
props = new Form("Hello World");
props.append("Hello World!/n");

Calendar rightNow = Calendar.getInstance();
props.append("YEAR:"+rightNow.get(Calendar.YEAR)+"/n");
props.append("MONTH:"+rightNow.get(Calendar.MONTH)+"/n");
props.append("DAY OF MONTH:"
                   +rightNow.get(Calendar.DAY_OF_MONTH)+"/n");
props.append("HOUR OF DAY:"
                   +rightNow.get(Calendar.HOUR_OF_DAY)+"/n");
props.append("MINUTE:"
                   +rightNow.get(Calendar.MINUTE)+"/n");
props.append("SECOND:"
                   +rightNow.get(Calendar.SECOND)+"/n");
props.append("MILLISECOND:"
                   +rightNow.get(Calendar.MILLISECOND)+"/n");

//date=new Date();
//props.append("Now Time:"+date.getTime()+"/n");
//zone=TimeZone.getDefault();
//String []zoneid=zone.getAvailableIDs();
//for(int i=0;i<zoneid.length;i++)
//{
//props.append(zoneid[i]+"/n");
//}
//props.append("Current Time Zone:"+zone.getID()+"/n");

props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
        }

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
        }

public void destroyApp(boolean unconditional)
{

         }

public void pauseApp()
{
display.setCurrent(null);
props = null;
        }

}
GetCalendar.java程序的运行效果如下图所示:


--
如何建立HTTP连接
发信站: 北大未名站 (2001年10月21日00:40:04 星期天) , 站内信件

 在J2ME程序中,可以利用HttpConnection接口建立HTTP连接,访问远程服务器上的资源。具
体的代码如下所示:
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;

public class GetHttpConnection extends MIDlet implements CommandListener
{
private Display display;
        private Form props;
private Command exitCommand = new Command("Exit", Command.EXIT, 1);

public GetHttpConnection()
{
display = Display.getDisplay(this);
         }

public void startApp()
{
props = new Form("Get Http Connection");
//props.append("Hello World!/n");
try
{
                    HttpConnection conn=(HttpConnection) Connector.open
                    ("http://rainbow:8080/index.html");
//conn.setRequestProperty("user","fancy");
props.append("Date:"+conn.getDate()+"/n");
props.append("Expiration:"+
                            conn.getExpiration()+"/n");
props.append(conn.getHost()+"/n");
props.append("Last Modified:"+
                            conn.getLastModified()+"/n");
props.append("Port:"+conn.getPort()+"/n");
props.append("Protocol:"+
                            conn.getProtocol()+"/n");
props.append("Request Method:"+
                            conn.getRequestMethod()+"/n");
props.append("Response Code:"+
                            conn.getResponseCode()+"/n");
props.append("Encoding:"+
                            conn.getEncoding()+"/n");
props.append("Length:"+conn.getLength()+"/n");
props.append("Type:"+conn.getType()+"/n");
props.append("URL:"+conn.getURL()+"/n");
props.append("Response Message:"+
                             conn.getResponseMessage()+"/n");
}
catch(Exception fe)
{
props.append("Error:"+fe.getMessage());
}
props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
        }

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
       }

public void destroyApp(boolean unconditional)
{
        }

public void pauseApp()
{
display.setCurrent(null);
props = null;
        }
}
 Connector类提供了open()方法,可以和各种各样的远程资源建立连接。open()方法的参数
就是远程资源的URL地址。open()方法的返回值是一个Connection接口。为了建立HTTP连接,
我们应该将它强制转换为HttpConnection接口的形式。一旦获取HttpConnection接口的实例
对象,就可以调用HttpConnection接口的各种方法,得到关于HTTP连接的各种信息。

使用J2ME+JavaMail发送电子邮件
发信站: 北大未名站 (2001年10月21日00:41:24 星期天) , 站内信件

  我的想法是建立一个Web服务器,使用Tomcat 4.0,支持JSP技术。再配置一个Mail服务器,
使用的软件是Imail 7.0.4。首先编写一个可以发送电子邮件的JSP程序(post.jsp),具体代码
如下所示:
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>
<%@ page import="javax.activation.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.mail.*" %>
<%@ page import="javax.mail.internet.*" %>

<%!
public class SmtpAuthenticator extends javax.mail.Authenticator
{
   public javax.mail.PasswordAuthentication getPasswordAuthentication()
     {
       return new javax.mail.PasswordAuthentication("fancy", "fancy");
     }
}
%>

<%
String username="fancyrainbow";
String password="fancy";
String from="fancy@rainbow";
String to="fancy@rainbow";
String cc="fancy@rainbow";
String subject="J2ME Mail Test";
//String content="J2ME Mail Test";
String content=request.getParameter("content");

Properties props = System.getProperties();
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host","rainbow"); //263

SmtpAuthenticator sa=new SmtpAuthenticator();
Session sess = Session.getInstance(props, sa);
sess.setDebug(true);

Message msg = new MimeMessage(sess);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to, false));
msg.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc, false));
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(content);
Transport.send(msg);
%>
Send Message OK!
 我将post.jsp程序保存在Tomcat 4.0的ROOT目录下面,然后使用Web浏览器测试此程序成功
。然后再将上一个J2ME程序(GetHttpConnection.java)改一改,让它与Tomcat 4.0服务器建立
连接,请求post.jsp程序。相关代码如下所示:
package fancy.test;

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

public class SendMail extends MIDlet implements CommandListener
{
private Display display;
   private Form props;
private Command exitCommand = new Command("Exit", Command.EXIT, 1);

public SendMail()
{
display = Display.getDisplay(this);
   }

public void startApp()
{
props = new Form("Get Http Connection");
//props.append("Hello World!/n");
try
{
HttpConnection conn=(HttpConnection)Connector.open("http://rainbow:8080/post.
jsp?content=Hello World");
//conn.setRequestProperty("user","fancy");
props.append("Date:"+conn.getDate()+"/n");
props.append("Expiration:"+conn.getExpiration()+"/n");
props.append(conn.getHost()+"/n");
props.append("Last Modified:"+conn.getLastModified()+"/n");
props.append("Port:"+conn.getPort()+"/n");
props.append("Protocol:"+conn.getProtocol()+"/n");
props.append("Request Method:"+conn.getRequestMethod()+"/n");
props.append("Response Code:"+conn.getResponseCode()+"/n");
props.append("Encoding:"+conn.getEncoding()+"/n");
props.append("Length:"+conn.getLength()+"/n");
props.append("Type:"+conn.getType()+"/n");
props.append("URL:"+conn.getURL()+"/n");
props.append("Response Message:"+conn.getResponseMessage()+"/n");
//InputStream is=conn.openInputStream();
//DataInputStream dis=new DataInputStream(is);
//props.append("System Info:"+dis.readUTF()+"/n");
props.append("Send Mail OK!"+"/n");

}
catch(Exception fe)
{
props.append("Error:"+fe.getMessage());
}
props.addCommand(exitCommand);
props.setCommandListener(this);
display.setCurrent(props);
        }

public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
   notifyDestroyed();
}
        }

public void destroyApp(boolean unconditional)
{
        }

public void pauseApp()
{
display.setCurrent(null);
props = null;
   }
}
 启动Tomcat 4.0、Imail 7.0.4、J2MEWTK。在J2MEWTK中运行SendMail.java程序,事后检查
邮箱,发现已经成功的收到了邮件。
 有两点需要说明一下:
 首先,按照上面的模式,我们可以编写出功能更为强大的程序来,例如使用J2ME+JDBC+JSP访
问远程的数据库系统,访问EJB组件等等。
 其次,如果要读取post.jsp程序的输出信息,你可以从HttpConnection接口中获取一个输
入流对象,逐个读取输入流中的数据即可。具体的代码我就不举了,你可以参考J2ME的DOC。


--
后记
发信站: 北大未名站 (2001年10月21日00:42:32 星期天) , 站内信件

 终于写完啦!
 自从大一接触Java以来,四年了,每天不Java一下就手痒,每天不Java一下就觉得有些失落,
Java已经成为我的生活的一个部分。Java给予我很多的乐趣,我想我应该为Java作些什么。
四天前,当我开始接触J2ME,当我使用J2MEWTK成功运行HelloWorld程序的时候,这个念头再次
浮现在我的脑海里。我应该为Java做些自己力所能及的事情,所以才会有这篇不算太长的文章
《J2ME学习札记》。不管别人的看法怎么样,我总算是了了自己的一番心事。我之所以写这篇
文章,还有另一个目的,那就是将我从Java中得到乐趣与你分享,希望你也能够将你从Java中
获取的乐趣写出来,与大家分享。

Ahthor:javalover
Date:2001-10-21
Status:Prepared

 
下载前可以先看下教程 https://pan.quark.cn/s/a4b39357ea24 在网页构建过程中,表单(Form)扮演着用户与网站之间沟通的关键角色,其主要功能在于汇集用户的各类输入信息。 JavaScript作为网页开发的核心技术,提供了多样化的API和函数来操作表单组件,诸如input和select等元素。 本专题将详细研究如何借助原生JavaScript对form表单进行视觉优化,并对input输入框与select下拉框进行功能增强。 一、表单基础1. 表单组件:在HTML语言中,<form>标签用于构建一个表单,该标签内部可以容纳多种表单组件,包括<input>(输入框)、<select>(下拉框)、<textarea>(多行文本输入区域)等。 2. 表单参数:诸如action(表单提交的地址)、method(表单提交的协议,为GET或POST)等属性,它们决定了表单的行为特性。 3. 表单行为:诸如onsubmit(表单提交时触发的动作)、onchange(表单元素值变更时触发的动作)等事件,能够通过JavaScript进行响应式处理。 二、input元素视觉优化1. CSS定制:通过设定input元素的CSS属性,例如border(边框)、background-color(背景色)、padding(内边距)、font-size(字体大小)等,能够调整其视觉表现。 2. placeholder特性:提供预填的提示文字,以帮助用户明确输入框的预期用途。 3. 图标集成:借助:before和:after伪元素或者额外的HTML组件结合CSS定位技术,可以在输入框中嵌入图标,从而增强视觉吸引力。 三、select下拉框视觉优化1. 复选功能:通过设置multiple属性...
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)内容概要:本文围绕“基于深度强化学习的微能源网能量管理与优化策略”展开研究,重点探讨了如何利用深度强化学习技术对微能源系统进行高效的能量管理与优化调度。文中结合Python代码实现,复现了EI级别研究成果,涵盖了微电网中分布式能源、储能系统及负荷的协调优化问题,通过构建合理的奖励函数与状态空间模型,实现对复杂能源系统的智能决策支持。研究体现了深度强化学习在应对不确定性可再生能源出力、负荷波动等挑战中的优势,提升了系统运行的经济性与稳定性。; 适合人群:具备一定Python编程基础和机器学习背景,从事能源系统优化、智能电网、强化学习应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微能源网的能量调度与优化控制,提升系统能效与经济效益;②为深度强化学习在能源管理领域的落地提供可复现的技术路径与代码参考;③服务于学术研究与论文复现,特别是EI/SCI级别高水平论文的仿真实验部分。; 阅读建议:建议读者结合提供的Python代码进行实践操作,深入理解深度强化学习算法在能源系统建模中的具体应用,重点关注状态设计、动作空间定义与奖励函数构造等关键环节,并可进一步扩展至多智能体强化学习或与其他优化算法的融合研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值