Forum
Tipps
News
Menu-Icon

Probleme mit Java-Applets unter Apache

Hi zusammen,

ich hab ein Problem mit Java-Applets, wenn der Apache läuft.
Rufe ich mein Applet (Liest 1-mal pro Sekunde eine Datei aus) normal, nicht wenn der Apache (XAMPP; localhost) läuft auf, klappt alles. Die Datei wird 1-mal pro Sekunde ausgelesen.
Läuft das Applet aber über localhost (Apache; XAMPP) gibt es Probleme:
1-mal liest der aus, aber keine weiteren Male. Das Applet scheint irgendwie gestoppt.

Woran kann das liegen und wie krieg ich das behoben???


Antworten zu Probleme mit Java-Applets unter Apache:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das ist aber merkwürdig.

Applets sind ja absolut clientseitige Programme, da dürfte ein Webserver gar nichts damit zu tun haben.

Wo liegt denn die Datei, die ausgelesen wird? Könnte es sein, dass sie irgendwo im Webserver-Verzeichnis liegt und der Apache den Zugriff darauf blockiert?

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ja eben. Deswegen wundere ich mich ja und poste hier.

Das Applet hab ich online und offline getestet.
Online läuft nix, da da der Apache läuft.
Offline läuft es nur ohne Apache. Mit Apache tut sich kaum was.

Ich hab auch andere Applets getestet. Die funktionieren alle wunderbar und überall.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ja und wie sieht's jetzt aus mit der Datei? Könnte es etwas damit zu tun haben?

Einfach mal ganz woanders hin kopieren und das Applet anpassen.

Und hast du mal getestet, wie sich die Sache im Internet verhält?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

So. Ich hab mal rumprobiert und folgendes festgestellt:

Das Programm bleibt nicht stehen, sondern nur die Datei wird nicht richtig ausgelesen.

Also liegt der Fehler irgendwo beim Datei auslesen, während das Ganze über Apache läuft.

Ohne Apache läuft das Ganze (wie auch vorher) wunderbar.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ja, soweit waren wir ja schon in etwa.

Lies bitte nochmal meine 1. Antwort.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hier mal meine beiden Pfadangaben. a) ist mit Apache, b) ist ohne Apache.

a) http://localhost/XXX/chat/applet.htm
b) file://localhost/D:/Programme/XAMPP/xampp/htdocs/XXX/chat/applet.htm

Normalerweise hat der Apache vollen Zugriff auf alle Dateien. Ich hatte bis jetzt nie solch ein Problem mit Dateien und Dateirechten.
Das ist aber auch das erste mal, dass ich so richtig ein Applet verwenden will.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ich hab das Ganze auch mal als JavaScript/Frame Version gemacht. Ist zwar ziemlich gebastelt aber es funktioniert. Das Ganze ist vom Prinzip her dasgleiche.

Hierbei fällt auch wieder auf, dass ohne Apache alles klappt, sobald das aber über den Apache läuft, klappt nix mehr mit dem Datei lesen.

Ich glaub so langsam, dass das am Apache liegt.
Aber ohne den Apache soll's nicht laufen, da ich den zum Speichern von Dateien brauch.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Jetzt verstehe ich gar nichts mehr.

Also erstmal: ich wollte nicht wissen, wo dein Applet liegt, sondern wo die Datei liegt, die ausgelesen wird, da es ja scheinbar daran scheitert.

Wenn es nicht allzu riesig ist, poste doch mal bitte den Code des Applets.

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das Applet und die Datei sind in einem Ordner.
Ich poste hier mal den gesamten Code.
Ich habe das Applet leicht modifiziert um es besser testen zu können.



DateiLesen.java:


import java.awt.*;
import java.applet.*;
import java.applet.Applet;
import java.net.*;
import java.io.*;

public class DateiLesen extends Applet implements Runnable {
  Thread leseThread;
  boolean running = true;

  TextArea leseArea;
  String textAusDatei;
  URL url;
  InputStream inputStream;
  InputStreamReader inputStreamReader;
  BufferedReader bufferedreader;

  int x = 0;
  String alterText;

  public void init() {
    setLayout(new BorderLayout());
    Font schrift = new Font("sansserif",Font.BOLD,12);
    Color backcol = new Color(244,244,244);

    leseArea = new TextArea();
    leseArea.setFont(schrift);
    leseArea.setBackground(Color.white);
    add(leseArea,"Center");

    setBackground(backcol);

    leseThread= new Thread(this);
    leseThread.start();
  }

  public void destroy() {
    running = false;
    leseThread = null;
  }

  public String dateiLesen(String dName) {
    textAusDatei = new String();

    try {
      url = new URL(getCodeBase(),dName);
      inputStream = url.openStream();
      inputStreamReader = new InputStreamReader(inputStream);
      bufferedreader = new BufferedReader(inputStreamReader);
      String neueZeile = null;

      while((neueZeile=bufferedreader.readLine())!=null) {
        textAusDatei += (neueZeile+"\n");
      }
    }
    catch(MalformedURLException e) {
      leseArea.setText("URL nicht gefunden");
    }
    catch(IOException e ) {
      leseArea.setText("Input Output-Problem");
    }

    return textAusDatei;
  }

  public void run() {
    while (running) {
      alterText = leseArea.getText();
      leseArea.setText(alterText+x+": "+dateiLesen("chat.txt"));

      x += 1;

      try {
        leseThread.sleep(1000);
      }
      catch (InterruptedException e) {
        System.out.println(e);
      }
    }
  }
}



Das Applet wird ganz normal, ohne Parameterübergabe eingebunden.
Es greift auf die Datei chat.txt zu.

Um es übersichtlich zu machen, schreib in die Datei chat.txt nur ein paar Wörter.

Wenn du das Applet am laufen hast und du mal die Datei chat.txt bei laufenden Applet änderst, sollte dir das Applet die Änderung innerhalb von max. einer Sekunde anzeigen.

Und genau da ist bei mir der Haken:
Ohne Apache zeigt der die Änderung an, mit Apache aber nicht, obwohl die Datei nachweislich verändert wurde.

Probiers mal aus!

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Sorry, ich hab grad kein JDK drauf, deswegen kann ich die Klasse nicht compilieren.

Kann es sein, dass du mit PHP in die Datei schreibst, und dass sich danach die Datei nicht mehr auslesen lässt? Vielleicht wird das Handle auf die Datei nicht geschlossen.

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Soll ich dir mal die Klasse zuschicken?

Das Handle auf die Datei wird geschlossen. Zum Testen ändere ich die Datei sowieso manuell.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Funktioniert bei mir in jedem Fall perfekt.

Hab Applet + chat.txt + aufrufende HTML-Datei an verschiedenen Orten gehabt: Desktop, htdocs-Ordner im XAMPP, auf einem anderen virtuellen Host...

Sowohl beim direkten Öffnen als auch beim Aufruf über den Webserver funktionierte es immer!

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Der hat immer die Änderungen in der Datei angezeigt???
Was für einen Webserver benutzt du?
Weil ich hab das auch online, auf meinem Webserver (eByteNet) getestet und da klappte es auch nicht...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Was denn für Änderungen? Wo soll ich denn hier was ändern?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Also wenn ich nebenbei die Textdatei offen habe, manuell etwas reinschreiben und anschließend speichere, wird das angezeigt, ja.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Siehe einen meiner letzten Beiträge:
----------
Wenn du das Applet am laufen hast und du mal die Datei chat.txt bei laufenden Applet änderst, sollte dir das Applet die Änderung innerhalb von max. einer Sekunde anzeigen.
----------

Angezeigt wird die Datei bei mir auch überall wunderbar.
Nur die Änderungen (wenn ich die editiere) nicht immer.
Ohne Webserver werden die Änderungen sofort im Applet sichtbar. Mit Webserver aber nicht.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ein Kumpel von mir testet das auch mal gleich.
Wenn da dasselbe, wie bei dir, rauskommt, dann muss ich mal schaun.

Falls sich noch was ergeben sollte, poste ich.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ich kann mich nur ein drittes Mal wiederholen: teste doch mal Applet + Textdate + HTML-Datei in einem völlig anderen Ordner, auf den der Webserver keinen Zugriff hat. Und das bei laufendem Webserver.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

ES KLAPPT!

Es liegt am Browser!

Ich verwende Opera und ich hab einfach mal IE, Firefox und Netscape getestet. Bei allen 3 klappt's, nur nicht bei Opera. Ist da vielleicht was falsch eingestellt???
Welchen Browser verwendest du?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

In der Tat!

Ich hatte es zuvor im IE und FF getestet, da ging alles wunderbar. Im Opera (bei mir Version 9) besteht das gleiche Problem.
Und wie du gesagt hast, tritt das Problem nur in Verbindung mit dem Webserver auf. Genauer gesagt dann, wenn man das HTML-Dokument über den Server aufruft, und nicht lokal.

Löscht man den Cache des Opera, wird die Textdatei neu eingelesen, aber das dürfte normal sein.

Habe auch mal schnell gecheckt, ob mein Opera die gleiche JRE verwendet wie die anderen Browser, und lt. dem Java-Check auf java.com ist das der Fall.

Nun bin ich ganz ehrlich überfragt. Wenn du eine Lösung oder einfach nur Lösungshinweise findest, dann poste diese mal bitte. Würde mich auf jeden Fall interessieren! Und wenn es nur Hinweise sind, kann ich versuchen, noch etwas an der Lösung mitzuarbeiten.

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

funktioniert nicht.
da kommt bei mir ein fehler, dass die seite nicht existiert.


« HELP&MANUAL - ein kleines Problemcl.exe »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Applet
Siehe Java. ...

Auslagerungsdatei
Die Auslagerungsdatei, auch bekannt als virtueller Speicher, ist ein wichtiges Element im Windows-Betriebssystem. Sie dient als Erweiterung des physischen Arbeitsspeicher...

Dateiendungen
Die Dateiendung, auch Dateinamenerweiterung, Dateierweiterung oder einfach "Endung" genannt, besteht aus meistens drei oder vier Buchstaben und wird mit einem Punkt an de...