SWT中调用MediaPlayer

这个问题终于搞定了,先来个截图:

具体代码如下:
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(00550420);
            clientSite.computeSize(
550420true);
            clientSite.computeTrim(
0,0,550,420);
            clientSite.setBackground(
new Color(Display.getDefault(), 2556161));


            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中在某个按钮事件中调用的时候,第一次下面的状态栏可以出来,但是第二次状态栏就没有了,但是单独运行的时候没有问题的!调了好久也不知道是怎么回事,有知道的可以看看,帮帮忙!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值