0

这个问题应该很简单,尽管我显然很想念它。我有一个带有图像和声音剪辑的 Java 小程序。所有图像都正确显示并且它们在 /bin 文件中。

但是,声音剪辑也在 /bin 文件中,根本不播放。

问题是: 1) 这个声音片段的代码片段格式是否正确?

mySound = getAudioClip(getDocumentBase(), "OnPoint.au");

和 2) 声音剪辑应该放在哪里,不是 /bin 文件夹吗?

下面是代码,请指教,谢谢!

import java.net.*;
import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.applet.Applet;
import java.applet.AudioClip;

导入 java.util.*;// 定时器在这个库中

public class bTrainAnimation extends Applet
{
private Image trainAndBush[];    // "Image" is inherited
private int totalImages = 17,    // total number of images in array
currentImage = 0,                // set current image array subscript to 0
sleepTime = 500;                 //  milliseconds to sleep
MediaTracker myImageTracker;     // "MediaTracker" is inherited
Timer myTimer;                // "Timer" is inherited
private AudioClip mySound;    // "AudioClip" is a inherited

public void init()
{
 // load the images when the applet begins executing
setSize(400,400);
mySound = getAudioClip(getDocumentBase(), "OnPoint.au");
myTimer = new Timer(true);
myTimer.schedule(
    new TimerTask()
    {
        public void run() // "run" is action performed by timer task
        {
            repaint(); 
                    }
    }
           ,0,sleepTime); // global VAR "sleepTime" = 500 milliseconds

// create array of all the images in slide show
  trainAndBush = new Image[ totalImages ];    // global VAR "totalImages" = 17 images
  myImageTracker = new MediaTracker( this ); 
  for( int i = 0; i < trainAndBush.length; i++ )
   {
   trainAndBush[i] = getImage(getDocumentBase(), // load an image in an applet 
     "Hill" + (i + 1 ) + ".jpg" );  

 // track loading image
 myImageTracker.addImage(trainAndBush[i], i);
   }

    try
     {
       catch ( InterruptedException e ){}
       mySound.play();
     }

 public void start(Graphics g)
 {
g.drawImage(trainAndBush[0],50,50,300,300, this );
currentImage = 1;       
 public void paint(Graphics g)
  {
{
if (myImageTracker.checkID(currentImage, true))
          {
      g.drawImage(trainAndBush[ currentImage ],50,50,300,300, this );
      if (currentImage == 0 )
        trainAndBush[ totalImages -1].flush();

        else trainAndBush [ currentImage -1].flush();
        currentImage = ++currentImage % totalImages;
      }
     else
            postEvent( new Event( this, Event.MOUSE_ENTER, ""));
       }
   }
 // override update to eliminate flicker
  public void update(Graphics g)
   {
  paint( g );
   }
  }
4

1 回答 1

0

很难通过格式阅读您的代码,但我会尽力回答。(如果您更新/编辑您的问题,我会尝试更新/编辑我的答案):

我不确定你从哪里得到“bin”目录的想法。如果这适用于图像,那么还有其他事情正在发生。

现在,我已经有一段时间没有这样做了,但我对文档的解释是:

getDocumentBase() 为您提供包含页面的 URL,因此如果您的 applet 包含在http://example.com/folder/hello.html中,那么这就是 getDocumentBase() 为您提供的。

如果您的音频位于

http://example.com/folder/audio/OnPoint.au

那么您的代码将如下所示:

mySound = getAudioClip(getDocumentBase().parent().child("audio"), "OnPoint.au")

请注意,Java 的 URL 类没有 parent() 和 child() 函数(这太容易了!),我只是为了解释的目的编造了它并包含它。

于 2012-05-29T23:22:53.557 回答