对不起,问题是如此具体,不想诱惑任何正在浏览模糊主题的人。这是一个音乐转录应用程序。我试图在从.wav文件中读取信息后在窗口上绘制频率图。我的主要问题是出现一个滚动条,当paintComponent处理任何其他图形时,它会起作用。我相信原因是因为我有一个不允许构建结束的BufferedInputStream,即使我要求它.close()。
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (mapHistory != null) {
Graphics g2d = (Graphics2D)g.create();
g2d.setColor(Color.red);
int samples, frequency, bytes;
byte[] data;
try {
FileInputStream fis = new FileInputStream("./pepe.wav");
BufferedInputStream bis = new BufferedInputStream(fis);
data = new byte[128];
bis.skip(44);
samples = 0;
while ((bytes = bis.read(data)) > 0) {
for (int i = 0; i < bytes/1000; i++) {
frequency = data[i] & 0xFF;
samples++;
System.out.println(samples + " " + frequency);
g2d.drawLine(samples+15, frequency + 120, samples+15, -frequency + 120);
}
}
bis.read(data);
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
g2d.dispose();
}
}
我现在不包括任何其他代码,因为我确信这一切都有效(就像它使用不同的图形一样)。这个图形稍微复杂一些(样本位超过9000万)尽管我将信息削减了1000倍并且非常友好地请求它,当光标触摸窗口时请停止并关闭信息的打印重复。构建永远不会停止,任何想法?如果我不够具体或需要包含更多我的项目,请告诉我,尽管我相信这里只是问题所在。谢谢!