# Applet findet include nicht



## filth (13. Jun 2010)

Hallo,

ich habe ein Applet, was ich folgendermaßen starte:


```
<APPLET CODE="SigPlusImgDemo.class" WIDTH=260 HEIGHT=40 ALIGN=middle archive="SigPlus2_52.jar">
```

In der SigPlus2_52.jar befinden sich Klassen, die vom Applet benötigt werden.

Das Applett startet im Browser nicht, es kommt eine NoClassDefDoundError Exception.

In Eclipse funktioniert alles (.jar ist im Classpath).

Könnte mir jemand sagen, was ich falsch mache?

Danke!


----------



## L-ectron-X (13. Jun 2010)

Wenn du Packages in deinem Programm definiert hast, musst du die auch noch im code-Attribut angeben.
Siehe auch FAQ: http://www.java-forum.org/applets/4482-verweigert-browser-anzeige-java-applets.html


----------



## filth (13. Jun 2010)

Hi,

also mir ist nicht ganz klar, was du meinst.

Das Applet sieht so aus:


```
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import com.topaz.sigplus.*;
import java.io.*;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.image.BufferedImage;
import java.applet.*;


public class SigPlusImgDemo extends Applet implements Runnable
   {

	private static final long serialVersionUID = 6326220098483005800L;
	SigPlus              sigObj = null;
    Thread               eventThread;

   	public static void main( String Args[] )
	{
	  SigPlusImgDemo demo = new SigPlusImgDemo();
	  demo.setSize(800,300);
	  demo.setVisible(true);
	  demo.setBackground(Color.lightGray);
	}

..
...
```


com.topaz.sigplus.*; wird nicht gefunden, wenn es im Browser gestartet wird. Der Inhalt ist aber in der SigPlus2_52.jar


----------



## L-ectron-X (13. Jun 2010)

Applets haben keine main()-Methode wie Applikationen.
Du musst mindestens die init()-Methode überschreiben und mit brauchbarem Code füllen.
...zu welchem es aber auch nicht gehört, vom Applet eine Instanz zu erzeugen...


----------



## filth (13. Jun 2010)

Ok, ich habe es soweit angepasst, der Fehler ist aber trotzdem der gleiche.


```
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import com.topaz.sigplus.*;
import java.io.*;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.image.BufferedImage;
import java.applet.*;


public class SigPlusImgDemo extends Applet implements Runnable
   {

	private static final long serialVersionUID = 6326220098483005800L;
	SigPlus              sigObj = null;
    Thread               eventThread;

   	public void init( )
	{	  
	  GridBagLayout gbl = new GridBagLayout();
		GridBagConstraints gc = new GridBagConstraints();
		setLayout(gbl);
		Panel controlPanel = new Panel();
		setConstraints(controlPanel, gbl, gc, 0, 0,
		GridBagConstraints.REMAINDER, 1, 0, 0,
		GridBagConstraints.CENTER,
		GridBagConstraints.NONE,0, 0, 0, 0);
		add(controlPanel, gc);

		
		Button clearButton = new Button("Löschen");
		controlPanel.add(clearButton);

		Button saveJpgButton = new Button("OK");
		controlPanel.add(saveJpgButton);
		
		try
			{
			ClassLoader cl = (com.topaz.sigplus.SigPlus.class).getClassLoader();
	  		sigObj = (SigPlus)Beans.instantiate( cl, "com.topaz.sigplus.SigPlus" );

	  		setConstraints(sigObj, gbl, gc, 0, 1,
	  		GridBagConstraints.REMAINDER, 1, 1, 1,
	  		GridBagConstraints.CENTER,
	  		GridBagConstraints.BOTH, 5, 0, 5, 0);
	  		add(sigObj, gc);
	  		sigObj.setSize(100,100);
          sigObj.clearTablet();
          //setTitle( "Signature" );


	  // eingabe löschen
	  clearButton.addActionListener(new ActionListener(){
		  public void actionPerformed(ActionEvent e){
                          System.out.println(sigObj.getKeyReceipt());
			    sigObj.clearTablet();
		   }
	  });

	  
	  // Bild speichern
	  saveJpgButton.addActionListener(new ActionListener(){
		  public void actionPerformed(ActionEvent e){
	    	 try {
	    		 sigObj.setTabletState(0);
               sigObj.setImageJustifyMode(5);
               sigObj.setImagePenWidth(10);
               sigObj.setImageXSize(1000);
               sigObj.setImageYSize(350);
               BufferedImage sigImage = sigObj.sigImage();
               int w = sigImage.getWidth(null);
               int h = sigImage.getHeight(null);
               int[] pixels = new int[(w * h) * 2];

               sigImage.setRGB(0, 0, 0, 0, pixels, 0, 0);
               FileOutputStream fos = new
               FileOutputStream("c:\\temp\\sig.jpg");
               sigObj.setTabletState(1); 
		                   
				 JPEGImageEncoder jpeg =
				 JPEGCodec.createJPEGEncoder(fos);
		         jpeg.encode(sigImage);
		         fos.close();
           }
           catch (Throwable th) {
          	 th.printStackTrace();
		     }
		   }	     
	  });



			// setup connection
          sigObj.setTabletModel("SignatureGem1X5");
          sigObj.setTabletComPort("HID1");
          
          // start pad
          sigObj.setTabletState(0);			
      	sigObj.setTabletState(1);
      	       	
			eventThread = new Thread(this);
			eventThread.start();

			}
		catch ( Exception e )
			{
			return;
			}
	}

       
	public void run()
	{
		try
		{
		   while ( true )
		   {
			   Thread.sleep(100);	
		   }
		}
		catch (InterruptedException e)
		{
		}
	 }

   

                //Convenience method for GridBagLayout
	        private void setConstraints(
		Component comp,
		GridBagLayout gbl,
	    	GridBagConstraints gc,
	    	int gridx,
	    	int gridy,
	    	int gridwidth,
	    	int gridheight,
	    	int weightx,
	    	int weighty,
	    	int anchor,
	    	int fill,
	    	int top,
	    	int left,
	    	int bottom,
	    	int right)
	    	{
			gc.gridx = gridx;
			gc.gridy = gridy;
			gc.gridwidth = gridwidth;
			gc.gridheight = gridheight;
			gc.weightx = weightx;
			gc.weighty = weighty;
			gc.anchor = anchor;
			gc.fill = fill;
			gc.insets = new Insets(top, left, bottom, right);
			gbl.setConstraints(comp, gc);
	    	}
            }
```

In Ecplipse lässt sich das als Applet starten, im Browser nicht.


----------



## L-ectron-X (13. Jun 2010)

Was soll ich mit einem halben Applet, wo abhängige Klassen fehlen? Ich kanns nicht kompilieren, keine Fehlermeldung replizieren, etc.


----------



## filth (13. Jun 2010)

Doch, das ist schon das gesamte Applet. Das einzige was du noch benötigst, sind folgende 2 jars, die in den Classpath müssen:

www.captured-dreams.de/temp/SigPlus2_52.jar
www.captured-dreams.de/temp/comm.jar

und zusätzlich die 

www.captured-dreams.de/temp/SigUsb.dll

Vielen Dank für deine Mühe!


----------



## L-ectron-X (13. Jun 2010)

Wie lautet eigentlich deine vollständige, genaue Fehlermeldung?


----------



## filth (13. Jun 2010)

Ich habe einen Screenshot der Console gemacht:

http://captured-dreams.de/temp/fehler.jpg

Nach meinem Verständnis wird die SigPlus2_52.jar nicht richtig geladen.


----------



## L-ectron-X (13. Jun 2010)

Hmm, eingebunden hast du das Applet richtig, das Paket hast du richtig importiert und die SigUsb.class existiert an der in der Fehlermeldung angegebenen Stelle. Beim Kompilieren dürfte es also keine Fehler geben.
Scheinbar ein Fehler in der externen Bibliothek. :bahnhof:


----------



## filth (13. Jun 2010)

Hmm, aber warum funktioniert es denn aus Eclipse heraus?


----------



## L-ectron-X (13. Jun 2010)

Hat vielleicht was mit der nativen Bibliothek zu tun, weiß ich noch nicht. Wo muss die eigentlich liegen?


----------



## filth (13. Jun 2010)

Es gibt quasi keine Doku für das Ding, ich habe die einfach im Projektordner liegen.


----------



## L-ectron-X (13. Jun 2010)

Die comm.jar muss natürlich auch mit ins Applet-Tag. Das ist dein Problem!
Hab ich doch glatt übersehen...


----------



## filth (13. Jun 2010)

Hmm, ich glaube wir kommen dem Ganzen näher, die Fehlermeldung sieht jetzt so aus:

www.captured-dreams.de/temp/fehler2.jpg


----------



## L-ectron-X (13. Jun 2010)

Ja, sieht so aus. Die AccessControlException verhindert die Ausführung des Applets, weil es potenziell unsichere Operationen an/mit dem Client-PC machen möchte. 
Du musst alle Jar-Dateien signieren, damit der Benutzer dem Applet die fehlenden Rechte einräumen kann, sofern er dem Applet vertraut. In der FAQ gibts ein Tool dafür.


----------

