📄 jmfapp-applet.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Quadralay WebWorks Publisher 5.0.2">
<meta name="TEMPLATEBASE" content="Portable HTML">
<meta name="LASTUPDATED" content="11/23/99 11:48:13">
<title>JMF Applet </title>
</head>
<body link="#3366CC" vlink="#9999CC" text="#000000" alink="#0000CC" bgcolor="#FFFFFF"
background="images/backgrnd.gif">
<table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<td><a href="JMFTOC.html">CONTENTS</a> |
<a href="RTPExtending.html">PREV </a> |
<a href="JMFApp-StateHelper.html">NEXT</a> |
<a href="JMFIX.html">INDEX</a></td>
<td align="right"><em>JMF 2.0 API Guide</em>
</tr>
</table>
<p><br clear="all">
</p>
<hr align="left">
<blockquote>
<div align="right">
<a name="46909"> </a><font size="3" face="Palatino, Times New Roman, Times, serif">A <br></font>
</div>
<div align="right">
<h2>
<a name="84412"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">JMF Applet</font>
</h2>
</div>
<p>
<a name="81450"> </a><font face="Palatino, Times New Roman, Times, serif">This Java Applet demonstrates proper error checking in a Java Media program. Like <code>PlayerApplet</code>, it creates a simple media player with a media event listener. </font>
</p>
<p>
<a name="81493"> </a><font face="Palatino, Times New Roman, Times, serif">When this applet is started, it immediately begins to play the media clip. When the end of media is reached, the clip replays from the beginning.</font>
</p>
<a name="84649"> </a><font size="1" face="Palatino, Times New Roman, Times, serif">
<table border="1" bordercolorlight="#FFFFFF" bordercolordark="#000000"
cellpadding="5" cellspacing="0">
<caption><b><i><font face="Palatino, Times New Roman, Times, serif"><a name="84658"> </a>Example A-1: TypicalPlayerApplet with error handling. (1 of 5)</font></i></b></caption>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="84668"> </a><code>import java.applet.Applet;
</code><a name="84669"> </a><code>import java.awt.*;
</code><a name="84670"> </a><code>import java.lang.String;
</code><a name="84671"> </a><code>import java.net.URL;
</code><a name="84672"> </a><code>import java.net.MalformedURLException;
</code><a name="84673"> </a><code>import java.io.IOException;
</code><a name="84674"> </a><code>import javax.media.*;
</code><a name="84675"> </a><code>
</code><a name="84676"> </a><code>/**
</code><a name="84677"> </a><code> * This is a Java Applet that demonstrates how to create a simple
</code><a name="84678"> </a><code> * media player with a media event listener. It will play the
</code><a name="84679"> </a><code> * media clip right away and continuously loop.
</code><a name="84680"> </a><code> *
</code><a name="84681"> </a><code> * <!-- Sample HTML
</code><a name="84682"> </a><code> * <applet code=TypicalPlayerApplet width=320 height=300>
</code><a name="84683"> </a><code> * <param name=file value="Astrnmy.avi">
</code><a name="84684"> </a><code> * </applet>
</code><a name="84700"> </a><code> * -->
</code><a name="84701"> </a><code> */
</code><a name="84702"> </a><code>
</code><a name="84703"> </a><code>public class TypicalPlayerApplet extends Applet implements
ControllerListener
</code><a name="84704"> </a><code>{
</code><a name="84705"> </a><code> // media player
</code><a name="84706"> </a><code> Player player = null;
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="84749"> </a><code> // component in which video is playing
</code><a name="84750"> </a><code> Component visualComponent = null;
</code><a name="84738"> </a><code> // controls gain, position, start, stop
</code><a name="84730"> </a><code> Component controlComponent = null;
</code><a name="84731"> </a><code> // displays progress during download
</code><a name="84732"> </a><code> Component progressBar = null;
</code><a name="84756"> </a>
<a name="84757"> </a> /**
<a name="84758"> </a> * Read the applet file parameter and create the media
<a name="84759"> </a> * player.
<a name="84760"> </a> */
<a name="84761"> </a>
<a name="84762"> </a> public void init()
<a name="84763"> </a> {
<a name="84764"> </a> setLayout(new BorderLayout());
<a name="84765"> </a> // input file name from html param
<a name="84766"> </a> String mediaFile = null;
<a name="84767"> </a> // URL for our media file
<a name="84768"> </a> URL url = null;
<a name="84769"> </a> // URL for doc containing applet
<a name="84770"> </a> URL codeBase = getDocumentBase();
<a name="84771"> </a>
<a name="84772"> </a> // Get the media filename info.
<a name="84773"> </a> // The applet tag should contain the path to the
<a name="84774"> </a> // source media file, relative to the html page.
<a name="84775"> </a>
<a name="84776"> </a> if ((mediaFile = getParameter("FILE")) == null)
<a name="84777"> </a> Fatal("Invalid media file parameter");
<a name="84783"> </a> try
<a name="84784"> </a> {
<a name="84785"> </a> // Create an url from the file name and the url to the
<a name="84786"> </a> // document containing this applet.
<a name="84787"> </a>
<a name="84788"> </a> if ((url = new URL(codeBase, mediaFile)) == null)
<a name="84789"> </a> Fatal("Can't build URL for " + mediaFile);
<a name="84790"> </a>
<a name="84791"> </a> // Create an instance of a player for this media
<a name="84792"> </a> if ((player = Manager.createPlayer(url)) == null)
<a name="84793"> </a> Fatal("Could not create player for "+url);
<a name="84794"> </a>
<a name="84795"> </a> // Add ourselves as a listener for player's events
<a name="84796"> </a> player.addControllerListener(this);
<a name="84802"> </a> }
<a name="84803"> </a> catch (MalformedURLException u)
<a name="84804"> </a> {
<a name="84805"> </a> Fatal("Invalid media file URL!");
<a name="84806"> </a> }
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="84814"> </a><code> catch(IOException i)
</code><a name="84815"> </a><code> {
</code><a name="84816"> </a><code> Fatal("IO exception creating player for "+url);
</code><a name="84817"> </a><code> }
</code><a name="84818"> </a><code>
</code><a name="84819"> </a><code> // This applet assumes that its start() calls
</code><a name="84820"> </a><code> // player.start().This causes the player to become
</code><a name="84821"> </a><code> // Realized. Once Realized, the Applet will get
</code><a name="84822"> </a><code> // the visual and control panel components and add
</code><a name="84823"> </a><code> // them to the Applet. These components are not added
</code><a name="84824"> </a><code> // during init() because they are long operations that
</code><a name="84825"> </a><code> // would make us appear unresposive to the user.
</code><a name="84826"> </a><code> }
</code><a name="84827"> </a><code>
</code><a name="84828"> </a><code> /**
</code><a name="84829"> </a><code> * Start media file playback. This function is called the
</code><a name="84830"> </a><code> * first time that the Applet runs and every
</code><a name="84831"> </a><code> * time the user re-enters the page.
</code><a name="84832"> </a><code> */
</code><a name="84833"> </a><code>
</code><a name="84834"> </a><code> public void start()
</code><a name="84835"> </a><code> {
</code><a name="84836"> </a><code> // Call start() to prefetch and start the player.
</code><a name="84837"> </a><code>
</code><a name="84838"> </a><code> if (player != null) player.start();
</code><a name="84839"> </a><code> }
</code><a name="84840"> </a><code>
</code><a name="84841"> </a><code> /**
</code><a name="84842"> </a><code> * Stop media file playback and release resources before
</code><a name="84843"> </a><code> * leaving the page.
</code><a name="84844"> </a><code> */
</code><a name="84845"> </a><code>
</code><a name="84846"> </a><code> public void stop()
</code><a name="84847"> </a><code> {
</code><a name="84848"> </a><code> if (player != null)
</code><a name="84849"> </a><code> {
</code><a name="84850"> </a><code> player.stop();
</code><a name="84851"> </a><code> player.deallocate();
</code><a name="84852"> </a><code> }
</code><a name="84853"> </a><code> }
</code><a name="84859"> </a>
<a name="84860"> </a> /**
<a name="84861"> </a> * This controllerUpdate function must be defined in order
<a name="84862"> </a> * to implement a ControllerListener interface. This
<a name="84863"> </a> * function will be called whenever there is a media event.
<a name="84864"> </a> */
<a name="84865"> </a>
<a name="84866"> </a> public synchronized void controllerUpdate(ControllerEvent event)
<a name="84872"> </a> {
<a name="84878"> </a> // If we're getting messages from a dead player, <code>
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="84888"> </a> // just leave
<a name="84889"> </a>
<a name="84890"> </a> if (player == null) return;
<a name="84891"> </a>
<a name="84892"> </a> // When the player is Realized, get the visual
<a name="84893"> </a> // and control components and add them to the Applet
<a name="84894"> </a>
<a name="84895"> </a> if (event instanceof RealizeCompleteEvent)
<a name="84896"> </a> {
<a name="84897"> </a> if ((visualComponent = player.getVisualComponent()) != null)
<a name="84898"> </a> add("Center", visualComponent);
<a name="84899"> </a> if ((controlComponent = player.getControlPanelComponent()) != null)
<a name="84900"> </a> add("South",controlComponent);
<a name="84901"> </a> // force the applet to draw the components
<a name="84902"> </a> validate();
<a name="84903"> </a> }
<a name="84904"> </a> else if (event instanceof CachingControlEvent)
<a name="84905"> </a> {
<a name="84906"> </a>
<a name="84907"> </a> // Put a progress bar up when downloading starts,
<a name="84908"> </a> // take it down when downloading ends.
<a name="84909"> </a>
<a name="84910"> </a> CachingControlEvent e = (CachingControlEvent) event;
<a name="84911"> </a> CachingControl cc = e.getCachingControl();
<a name="84912"> </a> long cc_progress = e.getContentProgress();
<a name="84913"> </a> long cc_length = cc.getContentLength();
<a name="84919"> </a>
<a name="84920"> </a> // Add the bar if not already there ...
<a name="84921"> </a>
<a name="84922"> </a> if (progressBar == null)
<a name="84923"> </a> if ((progressBar = cc.getProgressBarComponent()) != null)
<a name="84924"> </a> {
<a name="84925"> </a> add("North", progressBar);
<a name="84926"> </a> validate();
<a name="84927"> </a> }
<a name="84928"> </a>
<a name="84929"> </a> // Remove bar when finished ownloading
<a name="84930"> </a> if (progressBar != null)
<a name="84931"> </a> if (cc_progress == cc_length)
<a name="84932"> </a> {
<a name="84933"> </a> remove (progressBar);
<a name="84934"> </a> progressBar = null;
<a name="84935"> </a> validate();
<a name="84941"> </a> }
<a name="84942"> </a> }
<a name="84948"> </a> else if (event instanceof EndOfMediaEvent)
<a name="84949"> </a> {
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="84959"> </a> // We've reached the end of the media; rewind and
<a name="84960"> </a> // start over
<a name="84961"> </a>
<a name="84962"> </a> player.setMediaTime(new Time(0));
<a name="84963"> </a> player.start();
<a name="84964"> </a> }
<a name="84965"> </a> else if (event instanceof ControllerErrorEvent)
<a name="84966"> </a> {
<a name="84967"> </a> // Tell TypicalPlayerApplet.start() to call it a day
<a name="84968"> </a>
<a name="84969"> </a> player = null;
<a name="84970"> </a> Fatal (((ControllerErrorEvent)event).getMessage());
<a name="84971"> </a> }
<a name="84972"> </a> }
<a name="84973"> </a>
<a name="84980"> </a> void Fatal (String s)
<a name="84981"> </a> {
<a name="84982"> </a> <code> // Applications will make various choices about what
</code><a name="84983"> </a><code> // to do here. We print a message and then exit
</code><a name="84984"> </a><code>
</code><a name="84985"> </a><code> System.err.println("FATAL ERROR: " + s);
</code><a name="84986"> </a><code> throw new Error(s); // Invoke the uncaught exception
</code><a name="84987"> </a><code> // handler System.exit() is another
</code><a name="84988"> </a><code> // choice
</code><a name="84989"> </a><code> }
</code><a name="84990"> </a><code>}</code>
</pre>
</font></td>
</tr>
</table>
<br></font>
</blockquote>
<br clear="all">
<hr>
<a href="JMFTOC.html">CONTENTS</a> |
<a href="RTPExtending.html">PREV </a> |
<a href="JMFApp-StateHelper.html">NEXT</a> |
<a href="JMFIX.html">INDEX</a></td>
<br>
<hr>
<em>
<a href="copyright.html">Copyright</a> ©
1998-1999 Sun Microsystems, Inc. All Rights Reserved.
</em>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -