jar到底如何加入classpath啊
首先我觉得似懂非懂 我先说下自己的理解
类似tools.jar 在环境变量里添加.;%JAVA_HOME%\lib\tools.jar;
我刚在看一个mp3的程序 需要第三方的接口支持 很多教程说需要加入mp3spi这里的三个jar 分别为jl1.0 mp3spi1.9.4 和tritonus_share 都是jar文件
然后我复制了网上一个程序 貌似也是对的 把这三个文件放在java和编译好的class文件一起 因为环境变量里有"." 应该是指当前文件夹啊 和class一起的啊 因为可以运行啊
程序源码:
------------------------------------
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
public class MusicPlayer extends Frame {
boolean isStop = true;// 控制播放线程
boolean hasStop = true;// 播放线程状态
String filepath; // 播放文件目录
String filename; // 播放文件名称
AudioInputStream audioInputStream; // 文件流
AudioFormat audioFormat; // 文件格式
SourceDataLine sourceDataLine; // 输出设备
List list;// 文件列表
Label labelfilepath; // 播放目录显示标签
Label labelfilename; // 播放文件显示标签
public MusicPlayer() {
// 设置窗体属性
setLayout(new BorderLayout());
setTitle("MP3音乐播放器");
setSize(350, 370);
// 建立菜单栏
MenuBar menubar = new MenuBar();
Menu menufile = new Menu("文件");
MenuItem menuopen = new MenuItem("打开", new MenuShortcut(KeyEvent.VK_O));
menufile.add(menuopen);
menufile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open();
}
});
menubar.add(menufile);
setMenuBar(menubar);
// 文件列表
list = new List(10);
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// 双击时处理
if (e.getClickCount() == 2) {
// 播放选中的文件
filename = list.getSelectedItem();
play();
}
}
});
add(list, "Center");
// 信息显示
Panel panel = new Panel(new GridLayout(2, 1));
labelfilepath = new Label("播放目录:");
labelfilename = new Label("播放文件:");
panel.add(labelfilepath);
panel.add(labelfilename);
add(panel, "North");
// 注册窗体关闭事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
// 打开
private void open() {
FileDialog dialog = new FileDialog(this, "Open", 0);
dialog.setVisible(true);
filepath = dialog.getDirectory();
if (filepath != null) {
labelfilepath.setText("播放目录:" + filepath);
// 显示文件列表
list.removeAll();
File filedir = new File(filepath);
File[] filelist = filedir.listFiles();
for (File file : filelist) {
String filename = file.getName().toLowerCase();
if (filename.endsWith(".mp3") || filename.endsWith(".wav")) {
list.add(filename);
}
}
}
}
// 播放
private void play() {
try {
isStop = true;// 停止播放线程
// 等待播放线程停止
System.out.print("开始播放:" + filename);
while (!hasStop) {
System.out.print(".");
try {
Thread.sleep(10);
} catch (Exception e) {
}
}
File file = new File("E:\\game.mp3");
labelfilename.setText("播放文件:" + filename);
// 取得文件输入流
audioInputStream = AudioSystem.getAudioInputStream(file);
audioFormat = audioInputStream.getFormat();
// 转换MP3文件编码
if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
audioFormat.getSampleRate(), 16, audioFormat
.getChannels(), audioFormat.getChannels() * 2,
audioFormat.getSampleRate(), false);
audioInputStream = AudioSystem.getAudioInputStream(audioFormat,
audioInputStream);
}
// 打开输出设备
DataLine.Info dataLineInfo = new DataLine.Info(
SourceDataLine.class, audioFormat,
AudioSystem.NOT_SPECIFIED);
sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
// 创建独立线程进行播放
isStop = false;
Thread playThread = new Thread(new PlayThread());
playThread.start();
} catch (Exception e) {
e.printStackTrace();
}
}
class PlayThread extends Thread {
byte tempBuffer[] = new byte[320];
public void run() {
try {
int cnt;
hasStop = false; // 读取数据到缓存数据
while ((cnt = audioInputStream.read(tempBuffer, 0,
tempBuffer.length)) != -1) {
if (isStop)
break;
if (cnt > 0) {// 写入缓存数据
sourceDataLine.write(tempBuffer, 0, cnt);
}
} // Block等待临时数据被输出为空
sourceDataLine.drain();
sourceDataLine.close();
hasStop = true;
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
}
public static void main(String args[]) {
new MusicPlayer();
}
}
------------------------------------
可是我运行却出错
------------------------------------
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at MusicPlayer.play(MusicPlayer.java:129)
at MusicPlayer.access$1(MusicPlayer.java:113)
at MusicPlayer$2.mouseClicked(MusicPlayer.java:68)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.List.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
----------------------------------------
说找不到文件 文件名也对啊 我试着输出了文件位置 应该是正确的 我就觉得是不是没有成功引入那三个包呢。。
还是我的理解有错误 放在一起没有成功引入 要加在环境变量里吗 貌似我也试过了 不行哦 求高手给个具体的操作先
还有一般性利用第三方的接口jar文件 需要怎么做 具体一点 打个具体目录的比方给我
或成功帮我运行下上面的这段MP3程序 谢谢了~~~
[解决办法]
linux:
java -Xbootclasspath/a:/path/thirdlib.jar: -jar yourJarExe.jar
windows:
java -Xbootclasspath/a;/path/thirdlib.jar; -jar yourJarExe.jar
[解决办法]
在程序里添加个文件夹 lib
把jar copy进去 选择jar包 右键,build path,add to build path就可以了
[解决办法]