⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 j2me程序开发全方位基础讲解汇总.txt

📁 J2ME程序开发全方位基础讲解汇总
💻 TXT
📖 第 1 页 / 共 3 页
字号:
    2、将读取到的内容传递给播放器。
  将流信息传递给播放器,播放器按照一定的格式来进行解码操作,示例代码:
             Player player = Manager.createPlayer(is,"audio/x-wav");
  其中第一个参数为流对象,第二个参数为声音文件的格式。
    3、播放声音。
  使用Player对象的start方法,可以将声音播放出来,示例代码:
             player.start();
  在播放声音时也可以设定声音播放的次数,可以使用Player类中的setLoopCount方法来实现,具体可查阅API文档。
  下面是在NOKIA S60模拟器中测试通过。代码如下:
package sound;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import java.io.*;

public class SoundMIDlet extends MIDlet 
{
  private Player player = null;
  /** Constructor */
  public SoundMIDlet() 
       {
             try
             {
                   InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");
                   player = Manager.createPlayer(is,"audio/x-wav");
             }
             catch(IOException e)
             {
                   System.out.println("1:" + e);
             }
             catch(MediaException e)
             {
                   System.out.println("2:" + e);
             }
             catch(Exception e)
             {
                   System.out.println("3:" + e);
             }
      }

      /** Main method */
      public void startApp() 
      {
             if(player != null)
             {
                   try
                   {
              player.start();
                   }
                   catch(MediaException e)
                   {
              System.out.println("4:" + e);
                   }
             }
       }

       /** Handle pausing the MIDlet */
       public void pauseApp() 
       {
       }

       /** Handle destroying the MIDlet */
       public void destroyApp(boolean unconditional) 
       {
       }
}

十五、J2ME 3D编程的一些资料
  随着J2ME技术的发展,以及硬件速度的提升,3D游戏程序将慢慢的变成主流,最近想学习这一块的编程,所以收集了一些资料,和大家一起分享:
  1、JSR184
  JSR184是Nokia公司起草的一个关于3D API的规范,下载地址为:
  http://www.forum.nokia.com/main/1,,1_0_10,00.html#jsr184
  2、Nokia的3D编程资料
  http://www.forum.nokia.com/main/1,6566,21,00.html
  3、3D引擎
  一个简单的开放源代码的3D游戏引擎
  http://www.j2me.com.cn/Soft_Show.asp?SoftID=19
  国内一个合作开发3D引擎的项目:
  http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=11&thread=8593
  4、一款3D游戏产品
  http://games.sina.com.cn/newgames/2004/04/040217696.shtml
  5、支持3D的开发工具
  当前一些高端的手机支持3D开发,支持3D开发的开发工具中,通用的有SUN的J2MEWTK2.2。专用的是厂商提高的支持JSR184的SDK。

十六、3D编程——第一个3D程序
  参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。
  关于代码的编译和运行说明如下:
  1、以下代码在J2ME WTK2.2下面编译通过。
  2、代码分为两个文件:First3DCanvas.java和First3DMIDlet.java。
  3、使用J2ME WTK2.2建立新的工程,主MIDlet类为:first3d. First3DMIDlet
  4、将代码保存在你的工程目录下的first3d目录下。
  5、将J2ME WTK安装目录下的apps\Demo3D\res\com\superscape\m3g\wtksamples\retainedmode\content目录中的swerve.m3g文件复制到你的工程目录下的res目录下。
  6、你的工程建立后,设置工程,通过WTK界面中的“设置”按钮打开设置窗口,在“API选择”中,设置“目标平台”为:自定义;“简档”为“MIDP2.0”;“配置”为“CLDC1.1”;选中“Mobile 3D Graphics for J2ME(JSR184)”。
  7、这样你就可以编译和运行以下代码了。
  源代码如下: 

// First3DMIDlet.java
package first3d;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class First3DMIDlet extends MIDlet 
{
      private First3DCanvas displayable = new First3DCanvas();
      public void startApp() 
      {
            Display.getDisplay(this).setCurrent(displayable);
      }

      public void pauseApp() {}

      public void destroyApp(boolean unconditional) {}
}

// First3Dcanvas.java
package first3d;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import java.util.*;
/**
* 第一个3D程序
*/
public class First3DCanvas extends Canvas implements Runnable 
{
      /**World对象*/
      private World myWorld = null;
      /**Graphics3D对象*/
      private Graphics3D g3d = Graphics3D.getInstance();
      /**Camera对象*/
      private Camera cam = null;
      private int viewport_x;
      private int viewport_y;
      private int viewport_width;
      private int viewport_height;
      private long worldStartTime = 0;
      //重绘时间
      private int validity = 0;
      
      public First3DCanvas() 
      {
            //启动重绘界面的线程
            Thread thread = new Thread(this);
            thread.start();
            try 
            {
                   //导入3D图片
                   myWorld = (World) Loader.load("/swerve.m3g")[0];
                   viewport_x = 0;
                   viewport_y = 0;
                   viewport_width = getWidth();
                   viewport_height = getHeight();
                   cam = myWorld.getActiveCamera();
                   //设置cam对象
                   float[] params = new float[4];
                   int type = cam.getProjection(params);
                   if (type != Camera.GENERIC) 
                   {
                          //calculate window aspect ratio
                          float waspect = viewport_width / viewport_height;
                          if (waspect < params[1]) 
                          {
                                float height = viewport_width / params[1];
                                viewport_height = (int) height;
                                viewport_y = (getHeight() - viewport_height) / 2;
                          }
                          else 
                          {
                                float width = viewport_height * params[1];
                                viewport_width = (int) width;
                                viewport_x = (getWidth() - viewport_width) / 2;
                          }
                   }
                   worldStartTime = System.currentTimeMillis();
            }
            catch (Exception e) {}
      }
      
      protected void paint(Graphics g) 
      {
            //清除背景
            g.setColor(0x00);
            g.fillRect(0, 0, getWidth(), getHeight());
            //和3D对象绑定
            g3d.bindTarget(g);
            g3d.setViewport(viewport_x, viewport_y, viewport_width, viewport_height);
            long startTime = System.currentTimeMillis() - worldStartTime;
            validity = myWorld.animate((int)startTime);
            try 
            {
                   g3d.render(myWorld);
            }
            finally 
            {
                   g3d.releaseTarget();
            }
      }

      public void run() 
      {
            try
            {
                   while(true)
                   {
                         //重绘图形
                         repaint(viewport_x, viewport_y, viewport_width, viewport_height);
                   }
            }
            catch(Exception e){}
      }
}

十七、在J2ME网络编程中使用CMWAP代理
  在中国移动提供的网络连接中,分为CMNET和CMWAP两种,其中CMNET可以无限制的访问互联网络,资费比较贵。CMWAP类似一个HTTP的代码,只能访问支持HTTP的应用,但是资费便宜,稳定性比较差。
  在实际的J2ME网络编程中,一般需要提供以CMWAP代理的方式连接网络,在J2ME中,连接的代码和直接连接有所不同,代码如下:
             HttpConnection http = (HttpConnection)Connector.open(("http://10.0.0.172/"+url);
             http.setRequestProperty("X-Online-Host",ServerName);
  例如你需要访问的地址为:http://www.test.com/login/loginServlet则上面的代码就为:
             HttpConnection http = (HttpConnection)Connector.open(("http://10.0.0.172/" + "login/loginServlet");
             http.setRequestProperty("X-Online-Host","www.test.com");
  在实际使用过程中,只需要使用实际需要访问的地址的域名或者IP来代替ServerName,例如示例中的“www.test.com”,使用后续的地址类代替代码中的url,例如示例中的“login/loginServlet”,就可以实际的使用CMWAP代理来进行连接了。

十八、J2ME中的时间处理全攻略
  时间处理在程序开发中相当常见,下面对于时间处理做一个简单的说明。
  一、时间的表达方式
  时间在J2ME中有两种表达方式:
  1、以和GMT1970年1月1号午夜12点和现在相差的毫秒数来代表
  这种方式适合比较两个时间之间的差值。
  2、以对象的形式来表达
  二、时间处理的相关类
  时间处理在J2ME中涉及三个类:
  1、System类
   long time = System. currentTimeMillis();
  使用该方法可以获得当前时间,时间的表达方式为上面提到的第一种。
  2、Date类

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -