j2me手机游戏,dateTextFieldm的使用

j2me客户端代码如下 :
&&&&&&&&&&&&&&
String url = &ssl://192.168.0.229:9512&;
SecureConnection sc =
InputStream is =
OutputStream os =
DataInputStream dis =
DataOutputStream dos =
sc = (SecureConnection) Connector.open(url);
sc.setSocketOption(SocketConnection.LINGER, 10);
os = sc.openOutputStream();
dos = new DataOutputStream(os);
dos.writeUTF(name);
dos.flush();
服务器端使用的是apache的mina框架来处理sslsocket的 (同事开发的,里面是没有进行证书验证的,android iphone这些客户端都没有提示与证书相关的错误信息)& 我用j2me的模拟器测试时也可以与服务器端正常通信 ,但是把程序安装到真机上之后,进行连接时服务器端会报错 ,错误信息如下:
&&&&&&&
17:47:00,109 INFO [org.apache.mina.filter.logging.LoggingFilter.log(LoggingFilter.java:159)] -
17:47:00,109 INFO [org.apache.mina.filter.logging.LoggingFilter.log(LoggingFilter.java:159)] -
17:47:00,703 INFO [org.apache.mina.filter.logging.LoggingFilter.log(LoggingFilter.java:141)] -
17:47:00,703 INFO [org.apache.mina.filter.logging.LoggingFilter.log(LoggingFilter.java:141)] -
17:47:00,953 INFO [org.apache.mina.filter.logging.LoggingFilter.log(LoggingFilter.java:141)] -
17:47:00,953 WARN [org.apache.mina.filter.logging.LoggingFilter.log(LoggingFilter.java:123)] -
javax.net.ssl.SSLHandshakeException: SSL handshake failed.
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:495)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
at org.apache.mina.filter.logging.LoggingFilter.messageReceived(LoggingFilter.java:177)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:693)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:646)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:635)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:67)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1079)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.net.ssl.SSLException: Received fatal alert: bad_certificate
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.recvAlert(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readNetRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap(Unknown Source)
at javax.net.ssl.SSLEngine.unwrap(Unknown Source)
at org.apache.mina.filter.ssl.SslHandler.unwrap(SslHandler.java:725)
at org.apache.mina.filter.ssl.SslHandler.unwrapHandshake(SslHandler.java:663)
at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:549)
at org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:349)
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:476)
... 19 more
大家帮忙看看是什么原因,其他的客户端都没提示与证书相关的信息
问题补充:高级java工程师 写道
首先检查是否连接服务器,然后从新编译代码!!!!!!!!
什么意思?
5 小时前 ITeye管理员 发给 我 的消息
标题: 您好
ITeye管理员 5 小时前
尊敬的用户,
有用户反映您在回答问题时的答案与用户AngelAndAngel的答案过于相近,为避免抄袭的嫌疑,以后请注意遵守大赛规则,如确有抄袭行为,将取消参赛资格。
ITeye管理员
回复 转发 收藏 删除
高级java工程师
我无语了有人举报我超AngelAndAngel的,我真的很无语!!我不比赛了,如果有事你加我QQ
首先检查是否连接服务器,然后从新编译代码!!!!!!!!
已解决问题
未解决问题J2ME:使用后台线程按制HTTP连接 - 吴家大少少的专栏
- 博客频道 - CSDN.NET
首先,在没有使用后台线程控制HTTP连接时,常常会造成手机系统死机的假象。
主程序中直接使用后台线程:
可以设计一个网络连接按钮connectCommand,当用户按下该按钮的时候,才开始进入网络连接状态。
但是J2ME不能够在commandAction()方法中直接进行网络连接,因此需要创建一个后台网络连接的线程。
public void commandAction(Command c, Displayable d) {
if (c == connectCommand) {//按下连接按钮,则启动一个后台线程
Thread t = new Thread(){
public void run(){
//进行网络连接
t.start();
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
} catch (MIDletStateChangeException e) {
e.printStackTrace();
主程序中调用后台线程子类
单独创建一个类来实现网络连接,这个类可以继承Thread 也可以继承Runnable,然后这个类处理各种网络连接以后来实现它的功能。使用的基本方法:
public void commandAction(Command c, Displayable d) {
if (c == okCommand) {
Logger f = new Logger (this,getString());
Thread t =new Thread(f);
t.start();//启动线程
display.setCurrent(f);
class Logger extends Form implements Runnable,CommandListener{
Logger (Displayable next,String url){
下面是完整的程序:
import javax.microedition.io.C
import javax.microedition.io.HttpC
import javax.microedition.lcdui.A
import javax.
import javax.mandL
import javax.microedition.lcdui.D
import javax.microedition.lcdui.D
import javax.microedition.lcdui.F
import javax.microedition.lcdui.StringI
import javax.microedition.lcdui.TextB
import javax.microedition.midlet.MID
import javax.microedition.midlet.MIDletStateChangeE
public class HttpLogger extends MIDlet {
private Command exitCommand = new Command("Exit", Command.EXIT, 1);
private Command okCommand = new Command("OK", Command.OK, 1);
private Command cancelCommand = new Command("Cancel", Command.CANCEL, 1);
private Display display;
private URLEntry mainForm;
public HttpLogger() {
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
exitMIDlet();
protected void pauseApp() {
// TODO Auto-generated method stub
protected void startApp() throws MIDletStateChangeException {
if (display == null) {
display = Display.getDisplay(this);
mainForm = new URLEntry();
// 显示主屏幕
display.setCurrent(mainForm);
// 退出程序
private void exitMIDlet() {
notifyDestroyed();
// 显示错误信息
void displayError(Throwable e, Displayable next) {
Alert a = new Alert("错误");
a.setString(e.toString());
a.setTimeout(Alert.FOREVER);
display.setCurrent(a, next);
// 输入URL,内部类
class URLEntry extends TextBox implements CommandListener {
public URLEntry() {
super("Enter URL", "http://127.0.0.1:8080/HelloWorld.html", 100, 0);
addCommand(exitCommand);
addCommand(okCommand);
setCommandListener(this);
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
exitMIDlet();
} else if (c == okCommand) {
// 创建后台的网络连接
Logger f = new Logger(this, getString());
Thread t = new Thread(f);
t.start();
display.setCurrent(f);
// 连接网络的新线程,内部类
class Logger extends Form implements Runnable, CommandListener {
private String url;
private Displayable next;
private StringItem text = new StringItem(null, "");
private HttpConnection conn;
public Logger(Displayable next, String url) {
super("HTTP 信息");
// 获得地址信息
this.url =
this.next =
addCommand(cancelCommand);
setCommandListener(this);
// 屏幕上使用StringItem来显示信息
append(text);
public void run() {
// 创建一个连接不要放在构造函数中
conn = (HttpConnection) Connector.open(url);
} catch (Exception e) {
e.printStackTrace();
// 屏幕上显示服务器上的信息
update("连接到" + conn.getURL());
int rc = conn.getResponseCode();
update("Response code" + rc);
update("Response message:" + conn.getResponseMessage());
for (int i = 0; (key = conn.getHeaderFieldKey(i)) != null; ++i) {
// 获得网页Head信息
update(key + ":" + conn.getHeaderField(i));
} catch (Exception e) {
update("获得的异常:" + e.toString());
// 取消cancelCommand按钮
removeCommand(cancelCommand);
addCommand(okCommand);
// 使用String item 显示获得的信息
private void update(String line) {
if (display.getCurrent() != this) {
String old = text.getText();
StringBuffer buf = new StringBuffer();
buf.append(old);
if (old.length() > 0) {
buf.append('/n');
buf.append(line);
text.setText(buf.toString());
public void commandAction(Command arg0, Displayable arg1) {
display.setCurrent(next);
conn.close();// 关闭网络连接
} catch (Exception e) {
displayError(e, next);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:316421次
积分:3266
积分:3266
排名:第4477名
原创:63篇
转载:31篇
评论:251条
(2)(1)(1)(1)(2)(5)(4)(1)(2)(4)(2)(5)(1)(1)(1)(2)(8)(10)(17)(10)(15)J2ME API是什么东西?是J2ME类库的使用方法吗?_百度知道
J2ME API是什么东西?是J2ME类库的使用方法吗?
提问者采纳
API 是统称 可以理解为 J2ME里面所有的类,方法,接口等的一个大集合 说白了就是帮助文档
其他类似问题
您可能关注的推广
类库的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁j2me使用update()和draw()来达到按键控制菜单,会循环多次,怎么来调整?_百度知道
j2me使用update()和draw()来达到按键控制菜单,会循环多次,怎么来调整?
最高分&开始游戏&quot, 70;;import javax.start();关于&quot, 255)在
draw(g), 20);开始游戏&quot, getHeight()).out, 0;
if((keyState & DOWN_PRESSED););开始游戏&quot.out, 0, 0, getWidth();
g.sleep(frameDelay);
case 2.*.setColor(255, 20);
g.setColor(0, 0);
break, 0;最高分&quot.util, 0!=0)
gamenum--;
g, 50, 50.
gamenum=1:按DOWN键;public TestMenuCanvas(Display d) {
super(true), 70, 0);
Thread t = new Thread(this), getHeight());开始游戏&quot。求高手解答.drawString(&quot, 255), 0, 50;关于&;
} public void run() {
Graphics g = getGraphics().
g, getWidth(), 60;关于&quot!=0)
gamenum++;
g.setColor(255:System.drawString(&quot, 0.setColor(0, 50.drawString(&最高分&
g, 255.setColor(255,应该是从开始游戏换到最高分, 0).setColor(0;
if((keyState & UP_PRESSED).setCurrent(this).drawString(&:
g, 0,但是直接跳到关于.println(&quot, 0).lcdui。按下FIRE后;break.setColor(0:
g, 50, 50.drawString(&
case 3.setColor(0;最高分&quot:S private long frameD
frameDelay = 33.drawString(&
catch (InterruptedException is) { }
private void update(){
int keyState =getKeyStates();
while (true)
update();, 20).drawString(&quot.setColor(255!= 0)
switch(gamenum){
case 1,本来只应该显示一次信息;关于&quot.fillRect(0,但是却显示了多跳;
g, getWidth();
g, 255), 20)。一下是代码, 50.io.println(&
g.setColor(255, getHeight());
, 0, 20).fillRect(0.setColor(0;, 20);:import javax, 0).:
g,就会多次循环;
break:System, 50, 20), 0;, 50.microedition, 60;
g.lcdui.println(&quot.setColor(255; } public void start() {
} private void draw(Graphics g) {
switch(gamenum){
case 1, 20);
case 3, 50.drawString(&quot.*.*;
if((keyState & FIRE_PRESSED) ;public class TestMenuCanvas extends GameCanvas implements Runnable{ private Display display.drawString(&quot, 255, 0,用update来处理用户输入, 0);), 50, 50, 0), 0);
g, 255,draw()来绘制菜单, 0, 70.fillRect(0;
flushGraphics()。但是测试的时候按键一次.*, 60;),的线程中
提问者采纳
然后在需要重画(如keyPressed中)调用repaint()即可。你完全可以不需要update的。getKeyStates()是用来判断当前按键状态的.,请在keyPressed方法中加入相应的操作。具体如; } repaint();
break,相关代码放到paint(Graphics g)中...; case RIGHT;= 0) return,而按下一个键后;
break.如果只为处理输入:
switch (getGameAction(keyCode)) { case LEFT。同样的draw()也不需要,应该充分利用事件驱动的机制.,除非你的程序需要在没有事件时也要定期画动画(如游戏中): case FIRE.:public void keyPressed(int keyCode) { if (keyCode &gt.,这个方法只会在按键后被调用一次:
break。同样线程也是不需要的;}public void paint(Graphics g) {
相关绘画代码,重载如keyPressed这类事件响应方法来实现你的功能,很可能在几次循环中都没有被放开: default,所以就执行了很多次了.,你程序中update被主线程重复调用
提问者评价
谢谢您的回答。我也发现了是帧数间隔太小,导致多次响应按键。您说的方法我之前就实现过,是想换个方法
其他类似问题
j2me的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于j2me线程的使用_百度知道
关于j2me线程的使用
j2me中使用线程有什么好处??为什么要使用线程即使不使用线程其实也可以达到目的啊请高手解答
提问者采纳
com线程就是比如执行一个程序时可以 同时多个线程运行.cn/eschool/video/j2me/44。
其他类似问题
您可能关注的推广
j2me的相关知识
按默认排序
其他1条回答
用线程,做游戏的时候就会发现线程的作用了,其实是背景一直的往下走?这是最简单的一个例子,那么怎样实现,你飞机在不停的往上飞,例如一个打飞机的游戏,不然还用什么简单的例子,做游戏的时候,才能让背景以一个速度一直往下走?很简单
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 j2ee j2se j2me 的文章

 

随机推荐