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

📄 videocanvas.java

📁 本光盘是《J2ME无线移动游戏开发》一书的配套光盘
💻 JAVA
字号:
package ch11;

import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.*;

public class VideoCanvas
    extends Canvas
    implements CommandListener, PlayerListener, Runnable {

  //声明一个VideoPlayer_MIDlet对象
  private VideoPlayer_MIDlet parent;

  //声明一个Display对象
  private Display display;

  //声明一个播放器对象
  private Player player;

  //声明一个VideoControl接口
  private VideoControl videoControl;

  //声明视频文件的地址
  private String url;

  //声明一个控制线程
  private Thread initializer;

  //声明一个关闭按钮Command对象
  private Command close;

  //声明一个重放按钮Command对象
  private Command rePlay;

  /*
   4.构造器
   */
  public VideoCanvas(VideoPlayer_MIDlet parent) {
    super();
    this.parent = parent;
    display = Display.getDisplay(parent);
    close = new Command("关闭", Command.SCREEN, 1);
    addCommand(close);
    setCommandListener(this);
  }

  /*
   5.初始化
   */
  public void initializeVideo(String url) {
    this.url = url;
    initializer = new Thread(this);
    initializer.start();
  }

  /*
   6.线程实体
   */
  public void run() {

    try {
      player = Manager.createPlayer(url);
      parent.updateGauge();
      player.addPlayerListener(this);
      player.realize();
      parent.updateGauge();
      player.prefetch();
      parent.updateGauge();

    }
    catch (IOException ioe) {
      Alert alert = new Alert("传输错误", ioe.getMessage(), null, AlertType.ERROR);
      display.setCurrent(alert);

    }
    catch (MediaException me) {
      Alert alert = new Alert("媒体错误", me.getMessage(), null, AlertType.ERROR);
      display.setCurrent(alert);
    }

    playVideo();
  }

  /*
   7.播放实现
   */
  public void playVideo() {
    try {

      videoControl = (VideoControl) player.getControl("VideoControl");
      if (videoControl != null) {
        videoControl.initDisplayMode(videoControl.USE_DIRECT_VIDEO, this);
      }

      parent.updateGauge();

      int cHeight = this.getHeight();
      int cWidth = this.getWidth();
      videoControl.setDisplaySize(cWidth, cHeight);

      display.setCurrent(this);
      videoControl.setVisible(true);
      player.start();

    }
    catch (MediaException me) {
      Alert alert = new Alert("媒体错误", me.getMessage(), null, AlertType.ERROR);
      display.setCurrent(alert);
    }
  }

  /*
   8.绘制背景
   */
  public void paint(Graphics g) {
    g.setColor(128, 128, 128);
    g.fillRect(0, 0, getWidth(), getHeight());
  }

  /*
   9.响音媒体事件
   */
  public void playerUpdate(Player p, String event, Object eventData) {
    if (event == PlayerListener.END_OF_MEDIA) {
      if (rePlay == null) {
        rePlay = new Command("重新播放", Command.SCREEN, 1);
        addCommand(rePlay);
      }
    }

  }

  /*
   10.响应按钮事件
   */
  public void commandAction(Command c, Displayable s) {
    if (c == rePlay) {
      try {
        player.start();
      }
      catch (MediaException me) {
        Alert alert = new Alert("媒体错误", me.getMessage(), null, AlertType.ERROR);
        display.setCurrent(alert);
      }
    }

    else if (c == close) {
      player.close();
      parent.form.delete(1);
      display.setCurrent(parent.form);
      url = null;
      parent = null;
    }

  }

}

⌨️ 快捷键说明

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