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

📄 shockwaveflash.java

📁 用C++和JAVA写的FLASH程序,可以做为参考,看书没用的,直接看程序才有效果
💻 JAVA
字号:
package cn.ialvin.jni.windows.flash;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashSet;
import java.util.Iterator;

import cn.ialvin.jni.windows.GetHWND;


public class ShockwaveFlash extends Canvas {
	private static final long serialVersionUID = 1L;
	static {
		System.loadLibrary("JniLibrary/jni/windows/flash/ShockwaveFlash");
	}
	
	int HWND;
	int flash;
	private String movie = "http://www.ialvin.cn/flash/flash.swf";

	//构造方法
	public ShockwaveFlash() {}
	public ShockwaveFlash(String movie) {
		this.movie = movie;
	}


	private native int init(int hwnd, String movie);
	private native void dispose(int flash);
	
	private native void setMovie(String src, int flash);
	public void setMovie(String src) { 
		movie = src;
		if (HWND != 0 && flash !=0)
			this.setMovie(src, this.flash);
	}
	public String getMovie() {
		return movie;
	}
	
	private native void stop(int flash);
	public void stop() {
		if (HWND != 0 && flash !=0)
			this.stop(this.flash);
	}
	
	private native void play(int flash);
	public void play() { 
		if (HWND != 0 && flash !=0)
			this.play(this.flash);
	}

	private native void setVariable(String name, String value, int flash);
	public void setVariable(String name, String value) {
		if (HWND != 0 && flash !=0)
			this.setVariable(name, value, this.flash);
	}

	private native String getVariable(String name, int flash);
	public String getVariable(String name) {
		if (HWND != 0 && flash !=0)
			return this.getVariable(name, this.flash);
		return "";
	}
	
	
	//事件调用
	private HashSet _set = new HashSet();
	private void onReadyStateChange(int n) {
		for (Iterator iter = _set.iterator(); iter.hasNext();) {
			FlashListioner listener = (FlashListioner)iter.next();
			listener.onReadyStateChange(n);
		}
	}
	private void onProgress(int p) {
		for (Iterator iter = _set.iterator(); iter.hasNext();) {
			FlashListioner listener = (FlashListioner)iter.next();
			listener.onProgress(p);
		}
	}
	private void flashCall(String request) {
		for (Iterator iter = _set.iterator(); iter.hasNext();) {
			FlashListioner listener = (FlashListioner)iter.next();
			listener.flashCall(request);
		}
	}
	private void FSComand(String cmd, String arg) {
		for (Iterator iter = _set.iterator(); iter.hasNext();) {
			FlashListioner listener = (FlashListioner)iter.next();
			listener.FSComand(cmd, arg);
		}
	}
	public void addFlashListioner(FlashListioner listener) {
		if (null == listener) return;
		_set.add(listener);
	}
	public void removeFlashListioner(FlashListioner listener) {
		if (null == listener) return;
		_set.remove(listener);
	}
	
	//建立和销毁
	private static boolean isFirst = true;
	private native static void setJvm();
	public void addNotify() {
		super.addNotify();
		if (isFirst) {
			isFirst = false;
			setJvm();
		}
		HWND = GetHWND.getHWND(this);
		flash = init(this.HWND, this.movie);
		//System.out.println("ShockwaveFlash's HWND is: " + this.HWND);
		//System.out.println(flash);
	}
	
	public void removeNotify() {
		if (HWND != 0 && flash !=0)
			this.dispose(this.flash);
		super.removeNotify();
	}

	// 改变大小
	private native void resizeControl(int flash);
	public void setSize(Dimension d) { setSize(d.width, d.height); }
	public void setSize(int width, int height) {
		super.setSize(width, height);
		if (HWND != 0 && flash !=0)
			resizeControl(this.flash);
	}
	public void setBounds(Rectangle r) { setBounds(r.x, r.y, r.width, r.height); }
	public void setBounds(int x, int y, int width, int height) {
		super.setBounds(x, y, width, height);
		if (HWND != 0 && flash !=0)
			resizeControl(flash);
	}
	public void reshape(int x, int y, int width, int height) {
		super.reshape(x, y, width, height);
		if (HWND != 0 && flash !=0)
			resizeControl(flash);
	}
	



	public static void main(String[] args) {
		// TODO 自动生成方法存根
		//E:\\Video\\SWF\\唐伯虎点秋香之小强诞生.swf
		//C:\\Documents and Settings\\Administrator\\桌面\\a.swf
		//http://www.pkpk.org/music/qp.swf
		//http://www.pkpk.org/flash/yu.swf
		final Frame f = new Frame("");
		f.setSize(400, 400);
		//ShockwaveFlash fla = new ShockwaveFlash("E:\\Video\\SWF\\唐伯虎点秋香之小强诞生.swf");
		final ShockwaveFlash fla = new ShockwaveFlash("E:\\Video\\SWF\\唐伯虎点秋香之小强诞生.swf");//"http://www.pkpk.org/music/qp.swf");
		f.add(fla);
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				f.dispose();
			}
		});
		fla.addFlashListioner(new FlashListioner() {
			public void FSComand(String cmd, String arg) {
				System.out.println("flash 中传来命令: \"" + cmd + "\", 参数为: \"" + arg + "\"");
			}
			public void onReadyStateChange(int n) {}
			public void onProgress(int p) {}
			public void flashCall(String request) {}
		});

		try {
			
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		fla.setMovie("C:\\Documents and Settings\\Administrator\\桌面\\ShockwaveFlash\\Java\\a.swf");
		
		/*
		Frame ff = new Frame();
		ShockwaveFlash fla2 = new ShockwaveFlash("http://www.pkpk.org/music/qp.swf");//"E:\\Video\\SWF\\唐伯虎点秋香之小强诞生.swf");
		ff.add(fla2);
		ff.setBounds(100, 100, 500, 500);
		ff.show();
		;*/
		
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		fla.setVariable("FD", "中国人");
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		System.out.println("获取到变量 FD 的值为: " + fla.getVariable("FD"));
		//fla.play();
	}

}

⌨️ 快捷键说明

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