2011-07-10 51 views
2

我想要做2任务在同一时间:J2ME上的音频,我不知道哪里错了?

  • 播放音频文件。

  • 阅读它的原始数据做一些事情

这里是我的代码:

String wavPath = "file:///" + currentPath + fileName; 
FileConnection fc; 
try { 
    fc = (FileConnection) Connector.open(wavPath); 

    if (!fc.exists()) { 
     throw new IOException("File does not exists."); 
    } 

    InputStream is = fc.openInputStream(); 
    // to do something with raw data as print samples of it 

    Player player = Manager.createPlayer(wavPath); 
    player.realize(); 
    player.prefetch(); 
    player.start(); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 

但没有运行,音频文件不无法运行。如果我删除线:

InputStream is = fc.openInputStream(); 

音频文件运行得很好。但我想同时做2件任务,我不知道该怎么做。任何人都可以帮助我?

我曾尝试使用2线程,但它仍然无法正常工作,音频文件运行(线程1),但是线程2不运行:

new Thread(new Runnable() { 
    public void run() { 
     try { 
      Manager.createPlayer("file:///E:/" + fileName).start(); 
     } catch (MediaException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}).start(); 

new Thread(new Runnable() { 
    public void run() { 
     FileConnection fc; 
     try { 
      fc = (FileConnection) Connector.open("file:///E:/" + fileName); 
      InputStream is = fc.openInputStream(); 

      byte[] b = new byte[10]; 
      int length = is.read(b, 0, 10); 
      for (int i = 0; i < length; i++) { 
       form.append(b[i] + ""); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}).start(); 
+0

我要玩波形文件(.WAV) – itakanzebo

+0

,我可以看到,当你删除了这一行是“主”线程被阻塞在该呼叫尝试打开输入流,将工作的唯一原因。一段时间后你会得到例外吗? – Joeblackdev

+0

我试图模拟你使用两个文件副本描述的行为。播放第一副本的音频并阅读第二副本。只要用户没有注意到你以这种方式欺骗,谁在乎? – gnat

回答

3

你为什么不使用线程... 创建一个线程来播放wav文件 并使用另一个线程做读取文件...

在J2ME


0123参考 here更详细的信息穿线

这将大致是你在找什么。

+0

我试过2个线程,但它仍然无法工作。我在上面的主要问题中更新了我的代码。请帮帮我! – itakanzebo

+0

尝试预取内容... ' Player p = Manager.createPlayer(“file:/// E:/”+ fileName); p.prefetch(); p.start(); ' 也是我认为玩家需要独占模式访问文件,而其发挥它...尝试读出不同的文件中的线程2检查。 –

+0

我尝试读取其他音频文件,代码工作,但我想读取和播放相同的文件。任何解决方案吗? – itakanzebo

2

您的Player实例被垃圾收集。另外,播放过程中的文件访问可能是'具体实现',这意味着它可以在某些模型上工作,而不是在其他模型上工作。因此,如果你想要一些可靠的东西,那么首先要读取数据,将它复制到另一个文件等。

您可以随时goDataSource -path了。