# BMI-Messer funktioniert nicht



## leg0lyZe (27. Jun 2008)

Hallo,
ich habe auf meiner Website ein BMI-Messer:
legolyze.net/index.php?page=bmi

Das Problem ist nur, dass dieser online nicht funktioniert. Lokal funktioniert der BMI-Messer, aber online leider nicht. Ich habe mich erkundigt und erfahren, dass ein Fehler im Java-Code sein muss, da andere Applets angezeigt werden.

Doch da ich Java nur sporadisch kann, aus einer Schul-AG, wo wir auch den Messer gemacht haben, weiß ich nicht wo der Fehler ist.

Hier der Code:

```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.math.*;
import java.util.*;
import java.awt.font.*;

public class Bmi extends Applet implements ActionListener{
  Label l_titel = new Label ("- Body Mass Index -");
  Label l_groesse = new Label("Größe in cm");
  Label l_gewicht = new Label("Gewicht in kg");
  Label l_ergebnis = new Label("");
  Button b_start = new Button("- Auswertung -");
  Button b_neu = new Button("- Neu -");
  TextField tf_gewicht = new TextField("",3);
  TextField tf_groesse = new TextField("",3);
  Checkbox cb_mann = new Checkbox();
  Checkbox cb_frau = new Checkbox();
  public void init() {
  	Panel Bild = new Panel();
  	Bild.setLayout(new GridLayout(10,1,3,3));
  	add(Bild);
  	l_titel.setForeground(Color.blue);
  	l_titel.setFont(new java.awt.Font("SansSerif", 1, 20));
  	Bild.add(l_titel);
  	Bild.add(l_groesse);
  	Bild.add(tf_groesse);
  	Bild.add(l_gewicht);
  	Bild.add(tf_gewicht);
  	cb_mann.setLabel("Mann");
  	cb_mann.addItemListener(new java.awt.event.ItemListener() {
  		public void itemStateChanged (ItemEvent e) {
  			cb_mann_itemStateChanged(e);
  	   }
  	});   
  	Bild.add(cb_mann);
    cb_frau.setLabel("Frau");
  	cb_frau.addItemListener(new java.awt.event.ItemListener() {
  		public void itemStateChanged (ItemEvent e) {
  			cb_frau_itemStateChanged(e);
  	   }
  	});   
  	Bild.add(cb_frau);  	
  	b_start.addActionListener(this);
  	Bild.add(b_start);
  	b_neu.enable(false);
  	b_neu.addActionListener(this);
  	Bild.add(b_neu);
    Bild.add(l_ergebnis);
  }

  public void cb_mann_itemStateChanged(ItemEvent e){
  	cb_frau.setState(false); 
  	 	
  }
  
  public void cb_frau_itemStateChanged(ItemEvent e){
  	cb_mann.setState(false);
  	
  	
  }
  	
  public void actionPerformed(ActionEvent e) {
  	double hoch, schwer, bmi;
    String knopf;
    long vor, nach; 
       knopf = e.getActionCommand();
       if(knopf.equals("- Neu -"))
       {b_neu.enable(false);
        b_start.enable(true);
        tf_gewicht.setText("");
        tf_groesse.setText("");
        l_ergebnis.setText("");
        cb_frau.setState(false);
        cb_mann.setState(false);       	
       	}
      if(knopf.equals("- Auswertung -"))
       {b_neu.enable(true);
        b_start.enable(false);
        hoch=Float.valueOf(tf_groesse.getText()).floatValue();
        schwer=Float.valueOf(tf_gewicht.getText()).floatValue();
        bmi=(10000*schwer)/(hoch*hoch);
       vor = Math.round(Math.floor(bmi)); 
       nach = Math.round((bmi-vor)*100);  
         if(cb_mann.getState())
          {if (bmi<20) {l_ergebnis.setText("Du bist laut dem BMI untergewichtig!: "+vor+","+nach);};
           if (bmi>25) {l_ergebnis.setText("Du bist laut dem BMI übergewichtig!: "+vor+","+nach);};
           if ((bmi>=20) && (bmi<=25)) {l_ergebnis.setText("Du hast das richtige Gewicht! Weiter so!: "+vor+","+nach);};
          	};
          	
         if(cb_frau.getState())
          {if (bmi<19) {l_ergebnis.setText("Du bist laut BMI untergewichtig!: "+vor+","+nach);};
           if (bmi>24) {l_ergebnis.setText("Du bist laut BMI übergewichtig!: "+vor+","+nach);};
           if ((bmi>=19) && (bmi<=24)) {l_ergebnis.setText("Du hast das richtige Gewicht! Weiter so!: "+vor+","+nach);};
          	};
       	}     	
    
}      
}
```

Ich würde mich sehr freuen, wenn mir jemand weiterhilft.

MfG
leg0lyZe


----------



## parabool (1. Jul 2008)

Auf der Website ist das Applet mit "body.class" referenziert.
Deine Applet-Klasse heißt aber Bmi.


----------



## leg0lyZe (1. Jul 2008)

nein auch dann geht es nicht


----------



## L-ectron-X (1. Jul 2008)

Guck mal in die Java-Console, da wird ein Fehler ausgegeben.

Du musst auch die Klasse Bmi$2.class hochladen.


----------



## leg0lyZe (1. Jul 2008)

habe Bmi$2.class hochgeladen, aber das löst das Problem nicht


----------



## parabool (1. Jul 2008)

Du musst auch die Datei Bmi$1.class hochgeladen.


----------



## L-ectron-X (2. Jul 2008)

Guck in die Java-Konsole! Da findest du das Problem.


> java.lang.InstantiationException: Bmi$2
> at java.lang.Class.newInstance0(Unknown Source)
> at java.lang.Class.newInstance(Unknown Source)
> at com.opera.AppletPanel.runLoaderThread(AppletPanel.java:375)
> ...



http://java.sun.com/j2se/1.5.0/docs/api/java/lang/InstantiationException.html


----------



## leg0lyZe (2. Jul 2008)

ja also bei mir kommt immer, dass es den dateipfad nicht gibt, aber wie kann ich das ändern?


----------



## L-ectron-X (2. Jul 2008)

Ohne Code, kann man schlecht sagen, was bei dir schief geht. Kein Mensch weiß, was dein Applet macht.
Applets unterscheiden sich von Applikationen auch im Zugriff auf Resourcen.


----------



## leg0lyZe (3. Jul 2008)

Okay ich hoffe das ist alles was ihr braucht. Also den Appletcode habe ich ja schon gepostet

Der HTML-Code:

```
<div id="features">

	<div style="text-align:center;">

	 <applet code="Bmi.class" width="500" height="500" alt="BMIMesser"></applet>

	</div>

     </div>
```

Wenn du noch einen anderen Code brauchst sage es bitte ...

mfg


----------



## L-ectron-X (3. Jul 2008)

leg0lyZe hat gesagt.:
			
		

> Also den Appletcode habe ich ja schon gepostet


Ups, hatte ich glatt übersehen.
Ich habe deinen Code mal von Fehlern bereinigt und eine Jar-Version erzeugt.
Testen kannst du dein Applet hier.
Herunterladen kannst du das Jar hier. (Rechtklick -> Speichern unter...)
Im Jar findest du auch den Quelltext.


----------



## leg0lyZe (3. Jul 2008)

vielen dank
jetzt klappts


----------



## parabool (3. Jul 2008)

> Ich habe deinen Code mal von Fehlern bereinigt und eine Jar-Version erzeugt.



Dieser Code war sicher nicht optimal aber der Fehler lag wirklich nur darin,
daß die Bmi#1.class nicht hochgeladen war (hatte es auch getestet).

Dazu muss noch angemerkt werde,daß danach der Browser neu gestartet bzw.der Cache geleert werden
muss, da sonst wieder die Applet-Version ohne die erforderliche Klasse geladen wird.


----------



## leg0lyZe (3. Jul 2008)

parabool hat gesagt.:
			
		

> > Ich habe deinen Code mal von Fehlern bereinigt und eine Jar-Version erzeugt.
> 
> 
> 
> ...



war aber hochgeladen^^


----------



## parabool (3. Jul 2008)

> war aber hochgeladen



naja ok, wenn du zufrieden mit der Erklärung bist...  

M.E ist es wichtig, die tatsächliche Ursache eines Problems zu finden.

Aber hauptsache es funzt jetzt. :wink:


----------



## Wolfgang Lenhard (4. Jul 2008)

Hi leg0lyZe,
eine inhaltliche Anmerkung: Um festzustellen, wie ein BMI zu bewerten ist (Untergewicht / Übergewicht) muss doch aus das Lebensalter herangezogen werden. Ab 34 Jahren gilt beipielsweise bei Männern 21 bis 26 als Normalbereich.

Ciao,
   Wolfgang


----------



## leg0lyZe (4. Jul 2008)

ja würd mich auch interessieren^^


----------



## Wolfgang Lenhard (4. Jul 2008)

Naja, z. B. https://www.uni-hohenheim.de/wwwin140/info/interaktives/bmi.htm


----------



## Wolfgang Lenhard (4. Jul 2008)

Deutlich genauer, aber nur für den Bereich Kinder und Jugendliche: http://www.bzga-essstoerungen.de/allgemeine-infos/zu_dick_oder_zu_duenn/index.htm
Ist wohl ne statistische Frage, die an den Daten der Bevölkerung immer wieder neu normiert wird.


----------

