Java “什么是”呢;文件"&引用;“本地主机”;这个程序的构造函数是什么意思?

Java “什么是”呢;文件"&引用;“本地主机”;这个程序的构造函数是什么意思?,java,Java,这似乎是一个愚蠢的问题,但在这段代码中,我试图制作一个自动存储塔GUI。它使用一个组合框来选择6首歌曲。我的音乐文件夹和JukeBox.java程序所在的文件夹中都存储了.wav歌曲文件的副本。 我猜“file”是文件名,“localhost”是路径名??无论如何,它目前给了我这个错误:-我将张贴在下面的完整程序 craig@craig-laptop:~/Documents/panda/newGUI$ java JukeBox Exception in thread "main" java.la

这似乎是一个愚蠢的问题,但在这段代码中,我试图制作一个自动存储塔GUI。它使用一个组合框来选择6首歌曲。我的音乐文件夹和JukeBox.java程序所在的文件夹中都存储了.wav歌曲文件的副本。 我猜“file”是文件名,“localhost”是路径名??无论如何,它目前给了我这个错误:-我将张贴在下面的完整程序

craig@craig-laptop:~/Documents/panda/newGUI$ java JukeBox
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.sun.media.sound.JavaSoundAudioClip.readStream(JavaSoundAudioClip.java:345)
    at com.sun.media.sound.JavaSoundAudioClip.loadAudioData(JavaSoundAudioClip.java:324)
    at com.sun.media.sound.JavaSoundAudioClip.<init>(JavaSoundAudioClip.java:110)
    at sun.applet.AppletAudioClip.createAppletAudioClip(AppletAudioClip.java:125)
    at sun.applet.AppletAudioClip.<init>(AppletAudioClip.java:66)
    at java.applet.Applet.newAudioClip(Applet.java:311)
    at JukeBoxControls.<init>(JukeBox.java:36)
    at JukeBox.main(JukeBox.java:113)

//JukeBox.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.AudioClip;
import java.net.URL;

class JukeBoxControls extends JPanel  {

  private JComboBox musicCombo;
  private JButton stopButton, playButton;
  private AudioClip[] music;
  private AudioClip current;

  //constructor
  public JukeBoxControls ()  { 
   URL url1, url2,  url3, url4, url5, url6;
   url1 = url2 = url3 = url4 = url5 = url6 = null;

  //obtain and store the audio clips
  try  {
    url1 = new URL ("file", "localhost", "booradleys.wav");
    url2 = new URL ("file", "localhost", "notobig.wav");
    url3 = new URL ("file", "localhost", "roots.wav");
    url4 = new URL ("file", "localhost", "snakadaktal.wav");
    url5 = new URL ("file", "localhost", "sumthing.wav");
    url6 = new URL ("file", "localhost", "radiocontrol.wav");
  }
  catch (Exception exception) {}

  music = new AudioClip[7];
  music[0] = null; //corresponds to 'make a selection'
  music[1] = JApplet.newAudioClip (url1);
  music[2] = JApplet.newAudioClip (url2);
  music[3] = JApplet.newAudioClip (url3);
  music[4] = JApplet.newAudioClip (url4);
  music[5] = JApplet.newAudioClip (url5);
  music[6] = JApplet.newAudioClip (url6);

  JLabel titleLabel = new JLabel ("Java Juke Box");
  titleLabel.setAlignmentX (Component.CENTER_ALIGNMENT);

  //create the list of strings for combo box
  String[] musicNames = {"Make a selection...", "booradleys", "notobig",
                         "roots", "snakadaktal", "sumthing"};
  JComboBox <String> musicCombo = new JComboBox<> (musicNames);
  musicCombo.setAlignmentX (Component.CENTER_ALIGNMENT);

  //set up the buttons
  playButton = new JButton ("Play", new ImageIcon ("play.gif"));
  playButton.setBackground (Color.white);
  playButton.setMnemonic ('p');
  stopButton = new JButton ("Stop", new ImageIcon ("stop.gif"));
  stopButton.setBackground (Color.white);
  stopButton.setMnemonic ('s');

  JPanel buttons = new JPanel();
  buttons.setLayout (new BoxLayout (buttons, BoxLayout.X_AXIS));
  buttons.add (playButton);
  buttons.add (Box.createRigidArea (new Dimension(5, 0)));
  buttons.add (stopButton);
  buttons.setBackground (Color.cyan);

  //set up this panel
  setPreferredSize (new Dimension (300, 100));
  setBackground (Color.cyan);
  setLayout (new BoxLayout (this, BoxLayout.Y_AXIS));
  add (Box.createRigidArea (new Dimension(0, 5)));
  add (titleLabel);
  add (Box.createRigidArea (new Dimension(0, 5)));
  add (musicCombo);
  add (Box.createRigidArea (new Dimension(0, 5)));
  add (buttons);
  add (Box.createRigidArea (new Dimension(0, 5)));

  musicCombo.addActionListener (new ComboListener());
  stopButton.addActionListener (new ButtonListener());
  playButton.addActionListener (new ButtonListener());

  current = null;
  }

  //represents the action listener for combo box
  private class ComboListener implements ActionListener  {

   public void actionPerformed (ActionEvent event)  {
    if (current != null)
        current.stop();

    current = music[musicCombo.getSelectedIndex()];
    }
  }

  private class ButtonListener implements ActionListener  {

    public void actionPerformed (ActionEvent event)  {
      if (current != null)
        current.stop();
      if (event.getSource() == playButton)
        if (current != null)
            current.play();
    }
  }
}


public class JukeBox  {

  public static void main (String[] args)  {
    JFrame frame = new JFrame ("Java Juke Box");
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    JukeBoxControls controlPanel = new JukeBoxControls();
    frame.getContentPane().add(controlPanel);
    frame.pack();
    frame.setVisible(true);
  }
}
craig@craig-笔记本电脑:~/Documents/panda/newGUI$java光盘机
线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间
在com.sun.media.sound.JavaSoundAudioClip.readStream上(JavaSoundAudioClip.java:345)
位于com.sun.media.sound.JavaSoundAudioClip.loadAudioData(JavaSoundAudioClip.java:324)
请访问com.sun.media.sound.JavaSoundAudioClip。(JavaSoundAudioClip.java:110)
在sun.applet.AppletAudioClip.createAppletAudioClip(AppletAudioClip.java:125)中
applet.AppletAudioClip.(AppletAudioClip.java:66)
位于java.applet.applet.newAudioClip(applet.java:311)
JukeBoxControls.(JukeBox.java:36)
位于JukeBox.main(JukeBox.java:113)
//JukeBox.java
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.applet.AudioClip;
导入java.net.URL;
类JukeBoxControls扩展了JPanel{
私人JComboBox音乐公司;
私人按钮停止按钮,播放按钮;
私人音频剪辑[]音乐;
专用音频剪辑电流;
//建造师
公共JukeBoxControls(){
URL url1、url2、url3、url4、url5、url6;
url1=url2=url3=url4=url5=url6=null;
//获取并存储音频剪辑
试一试{
url1=新URL(“文件”、“本地主机”、“booradleys.wav”);
url2=新URL(“文件”、“本地主机”、“notobig.wav”);
url3=新URL(“文件”、“本地主机”、“根目录.wav”);
url4=新URL(“文件”、“本地主机”、“snakadaktal.wav”);
url5=新URL(“文件”、“本地主机”、“sumthing.wav”);
url6=新URL(“文件”、“本地主机”、“radiocontrol.wav”);
}
捕获(异常){}
音乐=新的音频剪辑[7];
音乐[0]=null;//对应于“进行选择”
音乐[1]=JApplet.newAudioClip(url1);
音乐[2]=JApplet.newAudioClip(url2);
音乐[3]=JApplet.newAudioClip(url3);
音乐[4]=JApplet.newAudioClip(url4);
音乐[5]=JApplet.newAudioClip(url5);
音乐[6]=JApplet.newAudioClip(url6);
JLabel titleLabel=新的JLabel(“Java自动点唱机”);
titleLabel.setAlignmentX(部件中心对齐);
//为组合框创建字符串列表
String[]musicNames={“进行选择…”、“booradleys”、“Nootbig”,
"根","snakadaktal","sumthing",;
JComboxMusicCombo=新的JComboxMusicNames;
musicCombo.setAlignmentX(组件中心对齐);
//设置按钮
playButton=newjbutton(“Play”,新图像图标(“Play.gif”);
playButton.setBackground(颜色:白色);
playButton.setmemonic('p');
stopButton=newjbutton(“Stop”,新图像图标(“Stop.gif”);
stopButton.setBackground(颜色:白色);
stopButton.set助记符('s');
JPanel按钮=新的JPanel();
buttons.setLayout(新的BoxLayout(按钮,BoxLayout.X_轴));
按钮。添加(播放按钮);
buttons.add(Box.createRigidArea(新维度(5,0));
按钮。添加(停止按钮);
按钮。背景(颜色。青色);
//设立这个小组
setPreferredSize(新尺寸(300100));
挫折背景(颜色:青色);
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
添加(Box.createRigidArea(新维度(0,5));
添加(标题标签);
添加(Box.createRigidArea(新维度(0,5));
添加(音乐mbo);
添加(Box.createRigidArea(新维度(0,5));
添加(按钮);
添加(Box.createRigidArea(新维度(0,5));
musicCombo.addActionListener(新ComboListener());
stopButton.addActionListener(新的ButtonListener());
playButton.addActionListener(新按钮Listener());
电流=零;
}
//表示组合框的操作侦听器
私有类ComboListener实现ActionListener{
已执行的公共无效操作(操作事件){
如果(当前!=null)
当前停止();
当前=音乐[musicCombo.getSelectedIndex()];
}
}
私有类ButtonListener实现ActionListener{
已执行的公共无效操作(操作事件){
如果(当前!=null)
当前停止();
if(event.getSource()==播放按钮)
如果(当前!=null)
当前播放();
}
}
}
公共类自动存储塔{
公共静态void main(字符串[]args){
JFrame=新的JFrame(“Java自动点唱机”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JukeBoxControls控制面板=新的JukeBoxControls();
frame.getContentPane().add(控制面板);
frame.pack();
frame.setVisible(true);
}
}

对于构造函数,它正在构造一个URL,以便:

url1 = new URL ("file", "localhost", "booradleys.wav");
几乎肯定会给您提供URL:

file://localhost/booradleys.wav

错误表明内存不足,因此需要找出原因。我会删减URL和音频片段(减少到一到两个),看看这是否是问题所在,然后使用可能更有效的格式(如MP3)或增加运行时环境的可用内存。

内存不足。文件非常大,或者您没有正确关闭资源。启动程序后多长时间会发生这种情况?为什么使用
URL
而不是
File
?请告诉第36行和第113行中有什么内容?或者在代码中添加行号。这个问题很容易理解。你怎么给台词编号?我去掉了一首1.2吉格的歌。我现在还剩下四个,每个大约40Mb。但是得到相同的错误。。。