Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Sonstiges (http://www.informatikerboard.de/board/board.php?boardid=2)
-- Off-Topic (http://www.informatikerboard.de/board/board.php?boardid=3)
--- Java Applet (http://www.informatikerboard.de/board/thread.php?threadid=1785)


Geschrieben von tigerbine am 17.01.2014 um 10:28:

  Java Applet

Ich möchte ein Java Applet im Firefox unter Linux testen. In Eclipse gibt der Applet viewer das Applet auch wieder. Im Firefox erhalte ich die Fehlermeldung "NullPointerException" oder "Applet nicht initialisiert."

Der Code ist aus einem Trainingsbuch, wobei ich (nachdem es nicht funktionierte) 2 Dinge verändert habe.

public vor class eingefügt, dann erst funktionerte der Appletviewer.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
import java.awt.Graphics;

public class HelloWorldApplet extends java.applet.Applet{

 public void paint(Graphics g) {
     g.drawString("Hello World", 5, 25);
 }
}


Hier applet-tag vor body geschlossen, im Buch wird dies erst nach body geschlossen verwirrt (habe ich gedreht) Und warum wird der Paragraph nicht geschlossen verwirrt

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<html>
<head>
<title>Hello to everyone!</title>
<body>
<p>My java Applet says:<br>
<applet code="HelloWorldApplet.class" width=150 height=25>
</applet>
</body>
</html>


Wie ihr am Hello World seht, bin ich mit Java noch ganz am Anfang, wer kann mir weiterhelfen? Wink

Kann es an Firefoxeinstellungen liegen?



Geschrieben von eulerscheZahl am 17.01.2014 um 14:17:

  RE: Java Applet

Zitat:
Bis zur Verabschiedung des HTML 4.0-Standards, war das Applet-Tag zum Einbinden von Java-Applets in Webseiten vorgesehen. Inzwischen gilt es als veraltet und wurde vom W3C mit dem Object-Tag ersetzt. In HTML5 funktioniert es gar nicht mehr.

von wiki.byte-welt.net
Da steht auch, wie es richtig geht, nämlich mit object

Das Fehlen von </p> kommt mir auch komisch vor.


edit: etwas rumprobiert:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<html>
  <head>
    <title>Hello to everyone!</title>
  <body>
    <p>My java Applet says:<br>
    object:<br>
    <object classid="java:HelloWorldApplet.class" 
      codetype="application/java-vm" width=200 height=200>
    </object>
    <br> <br>
    applet:<br>
    <applet code="HelloWorldApplet.class" width=200 height=200>
    </applet>
    </p>
  </body>
</html>

Das Problem war, dass das Fenster etwas zu schmal war, um mitzuteilen, dass hier eine Applet wäre, die aber gesperrt wurde.

Und ich jebe Karlito Recht, Java hat höchstens auf deinem Rechner etwas verloren, aber nicht im Internet



Geschrieben von Karlito am 17.01.2014 um 14:45:

 

Hallo tigerbine,

hoher Besuch vom Matheboard? Augenzwinkern

Aaalso: ich habe mal ein wenig rumprobiert. Es ist immer notwendig, die Ausführung des Java-Plugins für Firefox und Chrome freiz zu geben. Dazu erscheint normalerweise eine Freigabenachfrage. Wenn nicht, im Firefox die Tastenkombination "Strg-Shift-A" betätigen (Vorher auf irgendeine freie Fläche im Browser Klicken). Dann Unter Plugins das Java-Plugin aktivieren.

Unter Windows ist es zusätzlich noch notwendig, Java zu erlauben, Applets auszuführen. Dazu in der Windows-Systemsteuerung -> Java im Reiter "Sicherherit" den Pfad des Applets zur Ausnahmeliste hinzufügen. Alternativ (nicht zu empfehlen), sollte auch die Herabesetzung der Sicherheitsstufe funktionieren.

Allgemein ist zu sagen: Die Entwicklung von Java-Applets ist mittlerweile nicht mehr zu empfehlen. Wenn es geht sollten andere Technologien Anwendung finden. Beispielsweise HTML5 + JavaScript...

Bei Rückfragen, einfach rückfragen Augenzwinkern

Edit: der nicht geschlossene <p>-Tag ist definitiv ein Fehler. Vielleicht ist es besser das Oracle-Tutorial zu verwenden: http://docs.oracle.com/javase/tutorial/deployment/applet/index.html

VG,

Karlito



Geschrieben von tigerbine am 17.01.2014 um 16:46:

 

Danke an Euch. :wave:

Es ist ein zugegeben schon älteres Lehrbuch, also sicher vor HTML5. Leider auch mit einigen Tippfehlern, aber es liest sich für einen Einsteiger ganz gut, gerade weil es in Tageslektionen aufgebaut ist.

Dann teste ich die Beispiele nur im Applet Viewer, eh ich da Tür und Tor für was aufmache ...

Für HTML5, CSS3 und Java Script liegt schon ein anderes Buch bereit :-)

Da habe ich ein anderes Problem. --> neuer Thread? Oder im OT erlaubt?

Ich bin auch in Linux unterwegs, aber nicht als root. Der Xampp Server hat nun seine Verzeichnisse so gelegt, dass man Rootrechte braucht.

Als BestPractise habe ich den Umweg über den Dokumente-Ordner genommen. Dort schreibe ich das Coding mit gedit und kopiere es über den Terminal mit Rootrechten (sudo su, oder so ...) in den xampp ordner.

Habe ich irgendwie die Möglichkeit meinem Account mehr Rechte zu geben? Bei der Anmeldung kann ich nur mich oder Gastzugang auswählen.



Geschrieben von Karlito am 17.01.2014 um 23:45:

 

Hallo tigerbine,

Du kannst hier gerne Deine Fragen fortsetzen und brauchst keinen neuen Thread aufmachen.

Ich bin leider nicht so fit, was admin-Geschichten angeht. Eine einfache Variante, um ein Verzeichnis in XAMPP für Testzwecke freizugeben ist in deinem Homeverzeichnis ein Verzeichnis "public_html" (oder beliebig anders) anzulegen und im www-Ordner des XAMPP einen link darauf anzulegen.

Ich gehe mal davon aus, dass du Ubuntu oder Debian am laufen hast. Dort ist es normalerweise so, dass der Webserver unter dem Benutzer und der Gruppe www-data läuft. Somit geben wir der Gruppe www-data zugriff auf eines unserer Verzeichnisse und binden dies per Symbolischen Link in das Dokumentenverzeichnis von Apache ein (normalerweise /var/www)

Beispiel:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
cd ~                                    # wechsel in das home-verzeichnis
mkdir public_html
chown tigerbine:www-data public_html    # anpassung der Besitzmerkmale
chmod 755 public_html                   # berechtigungen für den zugriff auf das Verzeichnis
touch public_html/index.html            # anlegen einer index-datei, damit das verzeichnis nicht aufgelistet wird
chmod 644 public_html                   # anpassung der zugriffsrechte auf die index.html
sudo ln -s tigerbine /var/www/tigerbine # anlegen eines symbolischen links zu dem neuen verzeichnis


Ich hoffe das passt.

VG,

Karlito



Geschrieben von ed209 am 18.01.2014 um 10:18:

 

Hi Tigerbine Wink

Eine einfache Lösung unter Ubuntu wäre gksudo, das funktioniert wie sudo aber eben für graphische Anwendungen.
Aber denk dran, es nur für simple Programme zu verwenden die zur Distribution gehören (gedit sollte kein Sicherheitsrisiko sein, also kein Problem).

Alternativ könntest du die Verzeichnisse die Du brauchst einer Gruppe zuordnen und dann deinen Benutzer dieser Gruppen hinzufügen. (Hab ehrlich gesagt selber keine Ahnung wie man das macht, aber gibt es Anleitungen zu im Internet).

Meine persönliche Lösung ist, einen Kommandozeilen-Editor zu benutzen. (vim ist besser als emacs). Damit ist man langfristig flexibler, aber das ist eine große Umgewöhnung.

Gruß,
ED209 (ehemals known as PrototypeX29A im Matheboard)

PS: Ich hatte gehofft Applets wären tot.



Geschrieben von tigerbine am 18.01.2014 um 16:18:

 

Danke für eure Antworten. :-)

Dann kann ich Applet Lektionen aus dem java-Buch ja streichen.

xampp ist für html5/css3/javascript Buch gedacht.



Geschrieben von tigerbine am 20.01.2014 um 11:41:

 

In einem anderen JAVA Buch lese ich etwas von Swing, Servelts, DAtenbankprogrammierung. Die Themen sind im Gegensatz zu Applets noch aktuell?



Geschrieben von eulerscheZahl am 21.01.2014 um 06:09:

 

Swing: graphische Benutzeroberfläche
Servlets: Java-Programme, die auf einem Server laufen, um eine Seite zu generieren (nach dem Prinzip funktionert z.B. die auf dich zugeschnittene Ergebnisseite einer Suchmaschine).

Ich kann dir leider nicht sagen, ob man dafür gewöhnlich Java verwendet (im Studium haben wir mal ein wenig mit JSP gearbeitet), die Themen selbst sind aber auf jeden Fall noch aktuell.



Geschrieben von tigerbine am 21.01.2014 um 21:45:

 

Danke.

Dann hätte ich eine konkrete Frage.

ich möchte mir eine Benutzereingabe (Buchstabe) auch als Buchstaben wieder ausgeben lassen.

Nun habe ich gelesen, dass System.in.read() aber einen Integer-Wert liefert. Wie wandle ich diesen um, so dass ich mit System.out.println wieder den eingegebenen Buchstaben sehe?



Geschrieben von eulerscheZahl am 22.01.2014 um 06:12:

 

Ein int hat 32 Bit, wie willst du da einen ganzen String reinbringen?
mit read() geht es nicht, da werden nicht einmal Buchstaben zugelassen

Du brauchst einen Reader:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) {
	    InputStreamReader isr = new InputStreamReader(System.in);
	    BufferedReader br = new BufferedReader(isr);
	    System.out.print("Eingabe: ");
	    String eingabe = null;
		try {
			eingabe = br.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    System.out.println(eingabe);
	}
}



Geschrieben von tigerbine am 22.01.2014 um 10:14:

 

Danke, verstehe den Code aber noch nicht. So weit bin ich noch nicht im Lehrbuch. geschockt

Kommt vielleicht ja noch. Augenzwinkern



Geschrieben von Matze84 am 23.01.2014 um 21:24:

 

Ich persönlich kann dir da "Java ist auch eine Insel" in Version 7 empfehlen...

http://openbook.galileocomputing.de/javainsel/

Ich selbst habe mir das Buch gekauft, weil es dann einfacher zu lesen ist aber im OpenBook geht das auch gut. (Habe ich zumindest zu beginn gemacht, bevor ich mich zum Kauf entschieden habe)

Da wird das auch mit dem Reader, Swing, JDBC (Datenbanken in Java) erklärt oder zumindest angerissen.

XAMPP brauchst du für HTML5 / CSS3 / Javascript meines erachtens NICHT.

für diese 3 Sachen reicht theoretisch schon ein einfacher Editor wie z.B.
notepad++

XAMPP wird dann interessant, wenn du PHP und Datenbanken (Bsp.: MySQL) nutzen willst.



Geschrieben von tigerbine am 29.01.2014 um 19:40:

 

Danke für die Rückmeldung.

Ich hätte eine Frage zu Interfaces.

code:
1:
2:
3:
public interface SchokoRiegel {
boolean istLecker();
}


Was kann man damit machen. Ich dachte, Klassen können Interfaces implementieren.

code:
1:
2:
3:
4:
5:
public class SchokoLadenKeksGemisch implements SchokoRiegel {
@Override
public boolean istLecker(){
return true;
}


das heißt, das die Methode von dem Interface implementiert werden muss. Folgendes verstehe ich dann aber nicht.

code:
1:
2:
3:
4:
5:
public class SchokoladenSuechtiger {
public void essen (SchokoRiegel schokoriegel) {
if(schokoriegel.istLecker()) {
System.out.println("Boah, lecker");
}


Was soll SchokoRiegel schokoriegel ssein. Da kann man doch keine Instanz von bilden ... verwirrt



Geschrieben von Karlito am 29.01.2014 um 20:06:

 

Hallo,

ich finde das Beispiel ein wenig schlecht gewählt. Versuchen wir es mal mit einer anderen Analogie:

Alle Objekte, welche ein gemeinsames Interface haben, können in einer gewissen Art auf dem selben weg benutzt werden. So zum beispiel, Dinge, die man aufschließen kann. Alle implementieren ein Schloss...

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
 
public interface ISchloss {
	void aufschliessen();
}

public class Tresor implements ISchloss {
	@Override
	public void  aufschliessen(){
		// Ein sehr komplitierter Aufschliessalgorithmus
		System.out.println("Tja, leider ebbe hier.");
	}
}

public class Haus implements ISchloss {
	@Override
	public void  aufschliessen(){
		// Ein weniger komplitierter Aufschliessalgorithmus
		System.out.println("Willkommen im Haus");
	}
}


public class Main {
	public static void main(string[] args){
		Tresor tresor = new Tresor();
		Haus haus = new Haus();

		//beginne Raubzug
		schliesseAuf(Haus);		//Haus aufschliessen (Funktioniert, da Haus ein Schloss hat)
		schliesseAuf(Tresor); //Tresor auffschliesse (Funktioniert, da Tresor ein Schloss hat)
	}

	//Nimmt beliebige Objekte entgegen, die ein Schloss haben
	static void schliesseAuf(ISchloss ding){
		ding.aufschliessen();
	}
}


Anstatt das Interfache ISchloss zu nennen, hätte man es auch IAufschlissbar nennen können. Damit wird auch klar, dass alle Gegenstände, die das Interface implementieren aufschließbar sind.

Ich hoffe das macht es deutlich?

VG,

Karlito


Forensoftware: Burning Board, entwickelt von WoltLab GmbH