如何停止构建但保持JFrame窗口打开并使用滚动条显示?

时间:2016-01-23 00:31:35

标签: java swing jframe fileinputstream bufferedinputstream

对不起,问题是如此具体,不想诱惑任何正在浏览模糊主题的人。这是一个音乐转录应用程序。我试图在从.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倍并且非常友好地请求它,当光标触摸窗口时请停止并关闭信息的打印重复。构建永远不会停止,任何想法?如果我不够具体或需要包含更多我的项目,请告诉我,尽管我相信这里只是问题所在。谢谢!

0 个答案:

没有答案