这个问题终于搞定了,先来个截图:
具体代码如下:
package
com.zhangjun.mediaplayer;

import
org.eclipse.swt.SWT;
import
org.eclipse.swt.events.SelectionAdapter;
import
org.eclipse.swt.events.SelectionEvent;
import
org.eclipse.swt.layout.FillLayout;
import
org.eclipse.swt.ole.win32.OleAutomation;
import
org.eclipse.swt.ole.win32.OleClientSite;
import
org.eclipse.swt.ole.win32.OleFrame;
import
org.eclipse.swt.ole.win32.Variant;
import
org.eclipse.swt.widgets.Display;
import
org.eclipse.swt.widgets.FileDialog;
import
org.eclipse.swt.widgets.Menu;
import
org.eclipse.swt.widgets.MenuItem;
import
org.eclipse.swt.widgets.Shell;

public
class
SWTVideoPlayer
{

static OleClientSite site;
static OleAutomation auto;
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(300,180);
shell.setText("SWT Video Player");

shell.setLayout(new FillLayout());

OleFrame frm = new OleFrame(shell, SWT.NONE);

site = new OleClientSite(frm, SWT.NONE,"MediaPlayer.MediaPlayer.1");
auto = new OleAutomation(site);
int[] ids = auto.getIDsOfNames(new String[] { "Play" });
auto.invoke(ids[0]);
addFileMenu(frm);
shell.open();

while (!shell.isDisposed()){
if (!display.readAndDispatch()){
display.sleep();
}
}

site.deactivateInPlaceClient();
site.dispose();
auto.dispose();
}
public static void addFileMenu(OleFrame frame) {
final Shell shell = frame.getShell();
Menu menuBar = shell.getMenuBar();
if (menuBar == null) {
menuBar = new Menu(shell, SWT.BAR);
shell.setMenuBar(menuBar);
}
MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE);
fileMenu.setText("&File");
Menu menuFile = new Menu(fileMenu);
fileMenu.setMenu(menuFile);
frame.setFileMenus(new MenuItem[] { fileMenu });

MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE);
menuFileOpen.setText("Open");
menuFileOpen.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
fileOpen();
}
});
MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE);
menuFileExit.setText("Exit");
menuFileExit.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
shell.dispose();
}
});
}

public static void fileOpen() {
FileDialog dialog = new FileDialog(site.getShell(), SWT.OPEN);
dialog.setFilterExtensions(new String[] { "*.wma","*.mp3","*.wav" });
String filename = dialog.open();
if (filename != null) {
OleAutomation player = new OleAutomation(site);
int playURL[] = player.getIDsOfNames(new String[] { "Open" });
if (playURL != null) {
Variant theFile = new Variant(filename);
player.invoke(playURL[0],new Variant[] { theFile});
}
}
}
public static void setURL(String fileName){
if (fileName != null) {
OleAutomation player = new OleAutomation(site);
int playURL[] = player.getIDsOfNames(new String[] { "Open" });
if (playURL != null) {
Variant theFile = new Variant(fileName);
player.invoke(playURL[0],new Variant[] { theFile});
}
}
}
}
在帖一个,没有状态栏,但是有MediaPlayer播放音频文件时的那种水纹动画效果:
代码如下:
package
com.zhangjun.mediaplayer;


/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* [url]http://www.eclipse.org/legal/epl-v10.html[/url]
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
import
org.eclipse.swt.
*
;
import
org.eclipse.swt.events.
*
;
import
org.eclipse.swt.graphics.Color;
import
org.eclipse.swt.graphics.GC;
import
org.eclipse.swt.graphics.Image;
import
org.eclipse.swt.layout.
*
;
import
org.eclipse.swt.ole.win32.
*
;
import
org.eclipse.swt.widgets.
*
;

/*
* Open an OLE Windows Media Player.
*
* For a list of all SWT example snippets see
* [url]http://www.eclipse.org/swt/snippets/[/url]
*
* @since 3.3
*/
public
class
MediaPlayer2
{
static OleClientSite clientSite;
static OleAutomation auto;

public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Media Player Example");
shell.setLayout(new FillLayout());
try {
OleFrame frame = new OleFrame(shell, SWT.NONE);
// clientSite = new OleClientSite(frame, SWT.NONE, "WMPlayer.OCX");
// clientSite.doVerb(OLE.OLEIVERB_SHOW);//LE.OLEIVERB_INPLACEACTIVATE
addFileMenu(frame);
clientSite = new OleClientSite(frame, SWT.NONE, "WMPlayer.OCX");
// clientSite.setLayout(new FillLayout());
clientSite.setBounds(0, 0, 550, 420);
clientSite.computeSize(550, 420, true);
clientSite.computeTrim(0,0,550,420);
clientSite.setBackground(new Color(Display.getDefault(), 255, 61, 61));


auto = new OleAutomation(clientSite);

int result = clientSite.doVerb(OLE.OLEIVERB_SHOW);

int[] rgdispid = auto.getIDsOfNames(new String[]{"stretchToFit"});
int dispIdMember = rgdispid[0];
Variant[] rgvarg = new Variant[1];
rgvarg[0] = new Variant("True");
boolean isX = false;

rgdispid = auto.getIDsOfNames(new String[]{"uiMode"});
dispIdMember = rgdispid[0];
rgvarg = new Variant[1];
rgvarg[0] = new Variant("none");
isX = auto.setProperty(dispIdMember, rgvarg);

rgdispid = auto.getIDsOfNames(new String[]{"enableContextMenu"});
System.out.println("2 rgdispid=" + rgdispid);
dispIdMember = rgdispid[0];
rgvarg = new Variant[1];
rgvarg[0] = new Variant("True");
isX = auto.setProperty(dispIdMember, rgvarg);

rgdispid = auto.getIDsOfNames(new String[]{"enabled"});
dispIdMember = rgdispid[0];
rgvarg = new Variant[1];
rgvarg[0] = new Variant("True");
isX = auto.setProperty(dispIdMember, rgvarg);

rgdispid = auto.getIDsOfNames(new String[]{"fullScreen"});
dispIdMember = rgdispid[0];
rgvarg = new Variant[1];
rgvarg[0] = new Variant("False");
isX = auto.setProperty(dispIdMember, rgvarg);


rgdispid = auto.getIDsOfNames(new String[]{"windowlessVideo"});
dispIdMember = rgdispid[0];
rgvarg = new Variant[1];
rgvarg[0] = new Variant("False");
isX = auto.setProperty(dispIdMember, rgvarg);

rgdispid = auto.getIDsOfNames(new String[]{"URL"});
dispIdMember = rgdispid[0];
rgvarg = new Variant[1];
rgvarg[0] = new Variant("D:/纠缠.mp3");
isX = auto.setProperty(dispIdMember, rgvarg);
} catch (SWTError e) {
System.out.println("Unable to open activeX control");
return;
}
shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

static void addFileMenu(OleFrame frame) {
final Shell shell = frame.getShell();
Menu menuBar = shell.getMenuBar();
if (menuBar == null) {
menuBar = new Menu(shell, SWT.BAR);
shell.setMenuBar(menuBar);
}
MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE);
fileMenu.setText("&File");
Menu menuFile = new Menu(fileMenu);
fileMenu.setMenu(menuFile);
frame.setFileMenus(new MenuItem[] { fileMenu });

MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE);
menuFileOpen.setText("Open...");
menuFileOpen.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
fileOpen();
}
});
MenuItem menuFileStop = new MenuItem(menuFile, SWT.CASCADE);
menuFileStop.setText("Stop...");
menuFileStop.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
stop();
}
});
MenuItem menuFilePlay = new MenuItem(menuFile, SWT.CASCADE);
menuFilePlay.setText("Play...");
menuFilePlay.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
play();
}
});
MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE);
menuFileExit.setText("Exit");
menuFileExit.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
shell.dispose();
}
});
}

static void fileOpen() {
FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.OPEN);
dialog.setFilterExtensions(new String[] { "*.wma","*.mp3","*.wav" });
String filename = dialog.open();
if (filename != null) {
OleAutomation player = new OleAutomation(clientSite);
int playURL[] = player.getIDsOfNames(new String[] { "URL" });
if (playURL != null) {
Variant theFile = new Variant(filename);
player.setProperty(playURL[0], theFile);
}
}
}
static void play() {
int[] rgdispid = auto.getIDsOfNames(new String[] { "controls" }); //$NON-NLS-1$
Variant pVarResult = auto.getProperty(rgdispid[0]);
if (pVarResult == null || pVarResult.getType() == 0)
return;
OleAutomation controls = pVarResult.getAutomation();
rgdispid = controls.getIDsOfNames(new String[] { "play" }); //$NON-NLS-1$
controls.invoke(rgdispid[0]);
pVarResult.dispose();
controls.dispose();
}

static void stop() {
int[] rgdispid = auto.getIDsOfNames(new String[] { "controls" }); //$NON-NLS-1$
Variant pVarResult = auto.getProperty(rgdispid[0]);
if (pVarResult == null || pVarResult.getType() == 0)
return;
OleAutomation controls = pVarResult.getAutomation();
rgdispid = controls.getIDsOfNames(new String[] { "stop" }); //$NON-NLS-1$
controls.invoke(rgdispid[0]);
pVarResult.dispose();
controls.dispose();
}
}
以上有个问题,我在RCP中在某个按钮事件中调用的时候,第一次下面的状态栏可以出来,但是第二次状态栏就没有了,但是单独运行的时候没有问题的!调了好久也不知道是怎么回事,有知道的可以看看,帮帮忙!


具体代码如下:









































































































代码如下:





































































































































































































