📄 shockwaveflash.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 + -