Hi,

I downloaded the open source project Guitar Tuner (http://sourceforge.net/projects/guitartuner/)
Inside it there is an index.html file, a TunerApplet.jar file and a TunerApplet.java file (As well as some images and GPL etc.)
When i open index.html the applet displays as it should however if I try to recompile (Even without making any changes to the code) I get an error.

I am compiling with the command Sam-Rudges-MacBook-Pro:GuitarTuner samarudge$ javac tunerapplet.java then putting it all into a .jar archive using Sam-Rudges-MacBook-Pro:GuitarTuner samarudge$ jar cvf TunerApplet.jar TunerApplet.class But when I open the web page again (After closing FireFox and clearing cache) the applet displays but shows the error
"Error: Unable To Start Acquisition"
If you look in the code (below) the string from the error is on line 111

/*
GuitarTuner : automatic Guitar Tuner on Applet 
Copyright (C) 2005 (Arnault PACHOT)

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Contact : Arnault PACHOT
"OpenStudio, Editeur de logiciels libres" 
Le bourg, 43160 Saint Pal de Senouire, FRANCE.
info@openstudio.fr*/

import java.applet.*;  
import java.awt.*;  
import java.awt.event.*;
import javax.sound.sampled.*;

import java.net.*;
import java.io.*;






public class TunerApplet extends Applet implements MouseListener, ActionListener, MouseMotionListener
{  

	Image img;
	Image imgE;
	Image imgA;
	Image imgD;
	Image imgG;
	Image imgB;
	Image imgSelected = null;
    	
	TargetDataLine targetDataLine;
	CaptureThread captureThread;
	AudioFormat audioFormat;

	double freqMin = 77.781;
	double freqMax = 87.307;
	double freqOK = 82.406;		

	int coordSelectedx = 70;
	int coordSelectedy = 134;
	int xPos = 171;
	int yPos = 98-40;

	int dispError = 0;
	Panel infoPanel = new Panel();
	Button closeButton = new Button("Close");
	boolean bStopTuner = false;

 	public void start ()
	{   
	      	img = getImage(getCodeBase(),"TunerApplet.jpg");
		imgE = getImage(getCodeBase(),"Eselected.jpg");
		imgA = getImage(getCodeBase(),"Aselected.jpg");
		imgD = getImage(getCodeBase(),"Dselected.jpg");
		imgG = getImage(getCodeBase(),"Gselected.jpg");
		imgB = getImage(getCodeBase(),"Bselected.jpg");
		imgSelected = imgE;
		this.addMouseListener(this);
		this.addMouseMotionListener(this);		

		infoPanel.setLayout(new BorderLayout());

		Panel buttonPanel = new Panel();
		Label titleLabel = new Label("GuitarTuner");



		TextArea infoArea = new TextArea("GuitarTuner has been developed by OpenStudio\nwww.openstudio.fr\nCopyright (2005) Arnault Pachot.\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. (see http://www.gnu.org/copyleft/gpl.html)\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\n\nContact : Arnault PACHOT\nOpenStudio, Editeur de logiciels libres\nLe bourg, 43160 Saint Pal de Senouire, FRANCE.\ninfo@openstudio.fr\n", 8, 40, TextArea.SCROLLBARS_VERTICAL_ONLY );
		infoArea.setBackground(Color.lightGray);
		buttonPanel.add(closeButton);
		buttonPanel.setBackground(Color.lightGray);
		closeButton.addActionListener(this);
		//infoPanel.add(titleLabel);
		infoPanel.setBackground(Color.lightGray);
		infoPanel.add(infoArea);
		infoPanel.add(buttonPanel, BorderLayout.SOUTH);
		infoPanel.setVisible(false);
		add(infoPanel);
		audioFormat = new AudioFormat(8000.0F,8,1,true,false);
      		DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class,audioFormat);
		try
		{
			targetDataLine = (TargetDataLine)AudioSystem.getLine(dataLineInfo);
			targetDataLine.open(audioFormat);
			
			captureThread = new CaptureThread();
			captureThread.start();
		
		}
		catch (Exception e2) 
		{
      			dispError = 1;
			repaint();
			System.out.println("Error : Unable to start acqusition -> "+e2);
    		}
	}


public class CaptureThread extends Thread
{			
  	public void run()
	{
    		try
		{
    			
			int cnt2 = 0;
			int spectreSize = 2048*2*2*2*2;
			int sampleSize = 2048*2*2;
			double divi =  4*2*(4096/4000);
			byte data[] = new byte[spectreSize];
			int valtemp = 0;
 			targetDataLine.start();
			int nbValues = 0;
			double tempValue = 0;
			int nbMesures = 1;
			double[] ar = new double[spectreSize];
      			double[] ai = new double[spectreSize];
      					
			while(((cnt2 = targetDataLine.read(data,0,sampleSize)) > 0))
			{
				
				try
				{
 					for(int i = 0; i < sampleSize; i++)
      					{
         					ar[i] = (double)data[i];
         					ai[i] = 0.0;
      					}
					for (int i=sampleSize; i<spectreSize; i++)
					{
						ar[i] = 0.0;
         					ai[i] = 0.0;
      					}
					computeFFT(1, spectreSize, ar, ai);
      					
					double maxFreq = 0;
					double maxAmpl = 0;
					double maxIndex = 0;
					double erreur = 0;
					
					for (int i=(int)(freqMin*divi); i<(freqMax*divi);i++)
					{	
						if (Math.abs(ai[i]) > maxAmpl)
						{
							maxFreq = ar[i];
							maxAmpl = Math.abs(ai[i]);
							maxIndex = i;
							
						}
						
					}
					
					if(maxAmpl > 0.01)
					{
						erreur = ((maxIndex/divi - freqOK) / (freqOK - freqMin));
						
						tempValue += erreur;
						
						
						nbValues+=1;
						if (nbValues > (nbMesures - 1))
						{
							
							double angle =  ((tempValue / nbMesures)) -0.25;
							
								
							xPos = (int)(40*Math.sin(angle) + 171);
							yPos = (int)(98 - (40*Math.cos(angle) ) );
							nbValues = 0;
							tempValue = 0;
							repaint();
						}
					}
					
					
   				
					
   							
				}
				catch (Exception e2)
				{	
					System.out.println(e2);
      					
				}
				
				targetDataLine.flush();
      			}
	      		

    		}
		catch (Exception e) 
		{
      			System.out.println(e);
      			System.exit(0);
    		}		
  	}
	
}
   

 public static void computeFFT(int sign, int n, double[] ar, double[] ai)
   {
      double scale = 2.0 / (double)n;
      int i, j;
      for(i = j = 0; i < n; ++i)
      {
         if (j >= i)
         {
            double tempr = ar[j] * scale;
            double tempi = ai[j] * scale;
            ar[j] = ar[i] * scale;
            ai[j] = ai[i] * scale;
            ar[i] = tempr;
            ai[i] = tempi;
         }
         int m = n/2;
         while ((m >= 1) && (j >= m))
         {
            j -= m;
            m /= 2;
         }
         j += m;
      }
      int mmax, istep;
      for(mmax = 1, istep = 2 * mmax; mmax < n; mmax = istep, istep = 2 * mmax)
      {
         double delta = sign * Math.PI / (double)mmax;
         for(int m = 0; m < mmax; ++m)
         {
            double w = m * delta;
            double wr = Math.cos(w);
            double wi = Math.sin(w);
            for(i = m; i < n; i += istep)
            {
               j = i + mmax;
               double tr = wr * ar[j] - wi * ai[j];
               double ti = wr * ai[j] + wi * ar[j];
               ar[j] = ar[i] - tr;
               ai[j] = ai[i] - ti;
               ar[i] += tr;
               ai[i] += ti;
            }
         }
         mmax = istep;
      }
   }

	
	public void paint(Graphics g) 
	{
          
		if (img!=null)
		{
			g.drawImage(img,0,0,350, 200,this);
			if (imgSelected!=null)
			{
				g.drawImage(imgSelected,coordSelectedx,coordSelectedy,this);
				
			}
				g.setColor(Color.black);
			g.drawLine(xPos, yPos, 171, 98);
		}
		else
		{
			g.drawString("Loading...",20,60);
		}
		if (dispError == 1)
		{
			g.setColor(Color.black);
			g.drawString("Error : Unable to start acquisition",86,124);
		}
	}

 	public void mouseClicked(MouseEvent e) 
	{
    	 	int x = e.getX();
		int y = e.getY();
		int selectedNote = 0;
		if (x > 74 && y > 137 && x < 94 && y < 154)
		{
			freqMin = 77.781;
			freqMax = 87.307;
			freqOK = 82.406;
		
			imgSelected = imgE;
			coordSelectedx = 70;
			
		}
		if (x > 110 && y > 137 && x < 128 && y < 154)
		{
			freqMin = 103.826;
			freqMax = 116.540;
			freqOK = 110.0;
			
			imgSelected = imgA;
			coordSelectedx = 106;
		}
		if (x > 144 && y > 137 && x < 163 && y < 154)
		{
			freqMin = 138.591;
			freqMax = 155.563;
			freqOK = 146.832;
			imgSelected = imgD;
			coordSelectedx = 141;
		}
		if (x > 180 && y > 137 && x < 199 && y < 154)
		{
			freqMin = 184.997;
			freqMax = 207.652;
			freqOK = 195.997;
			imgSelected = imgG;
			coordSelectedx = 176;
		}
		if (x > 214 && y > 137 && x < 236 && y < 154)
		{
			freqMin = 233.081;
			freqMax = 261.625;
			freqOK = 246.941;
			imgSelected = imgB;
			coordSelectedx = 212;
		}
		if (x > 248 && y > 137 && x < 268 && y < 154)
		{
			freqMin = 311.126;
			freqMax = 349.228;
			freqOK = 329.627;
			imgSelected = imgE;
			coordSelectedx = 247;
		}
		if (x > 24 && y > 179 && x < 313 && y < 198)
		{
		
			
			infoPanel.setVisible(true);
			validate();
			repaint();

		}
		repaint();

		
    	}
 
	public void mouseMoved(MouseEvent e)
	{
		int x = e.getX();
		int y = e.getY();
		
		if (x > 24 && y > 179 && x < 313 && y < 198)
		{
			
			setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		}
		else
		{
			setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
			
		}
	}
   
  
    //========================================================== ignored
    //==== the other motion events must be here, but do nothing.
     public void mouseDragged (MouseEvent e) {}  // ignore
    //==== these "slow" mouse events are ignored.
    public void mouseEntered (MouseEvent e) {}  // ignore
    public void mouseExited  (MouseEvent e) {}  // ignore
    public void mousePressed (MouseEvent e) {}  // ignore
    public void mouseReleased(MouseEvent e) {}  // ignore


	public void actionPerformed(ActionEvent evt) 
    	{
		
		
		
    		if (evt.getSource()==closeButton)
		{
			infoPanel.setVisible(false);
			repaint();
		}
	}

}

I have even tried signing the file using Sam-Rudges-MacBook-Pro:GuitarTuner samarudge$ keytool -genkey -alias Tuner -keypass authentic -keystore Tuner -storepass authentic then Sam-Rudges-MacBook-Pro:GuitarTuner samarudge$ jarsigner -keystore Tuner -storepass authentic -keypass authentic TunerApplet.jar Tuner I am quite new to Java and was expecting just to be able to edit the file, compile and .jar it then possibly digitally sign it

What am I doing wrong?
Thanx,
Sam Rudge

Recommended Answers

All 2 Replies

That error message should contain a little more information at the end. They are appending the string description on that line.

If you want more info than that, add an "e2.printStackTrace()" in the catch block. The app might need the images in the jar file. Open up the original jar and see what all is in there.

Edit: Yep, I just downloaded the app and checked. The images are in there as well. Try rebuilding your jar with

jar [B]u[/B]vf TunerApplet.jar TunerApplet.class

to update the existing jar (you may want to make a copy of it first :) )

commented: Very good information, helpful and quick response +2

You are a genius =D
Thankyou so much for that, have a (virtual) pint on me =P

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.