JavaScript Textdatei schreiben über JavaApplet

Impulse-

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
323
Hi,
Ich komme gerade nicht mehr weiter. Das Ziel: JavaScript übergibt dem Java Applet Variablen, die das Applet dann in eine Textdatei schreibt. Außerdem kann das JavaScript mit Hilfe des Applets diese Textdatei wieder auslesen, das klappt schon ;). Alles wird lokal ausgeführt, das Applet habe ich signiert. Das Applet alleine funktioniert auch wunderbar, aber wenn ich über das JavaScript die WriteText-Methode ausführen will, passiert nichts und ich sehe auch keine Fehler in der Konsole :watt:

der HTML-Code:
Code:
<html>
<body>

   <object type="application/x-java-applet;version=1.4.1" name="japp" id="japp" width="250" height="60">
        <param name="archive" value="points.jar"> 
        <param name="code" value="com.points.Points">
        <param name="mayscript" value="yes"> 
        <param name="scriptable" value="true"> 
    </object>

  <form name=Buttons>
  <input type=button value="Read" onClick="document.japp.ReadText();">
  <input type=button value="Write" onClick="document.japp.WriteText();">
  </form>

</body>
</html>

das Applet:
Code:
package com.points;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.Applet;


public class Points extends Applet {
   Button read = new Button("Read");
   Button write = new Button("Write");
   Label label = new Label("Punkte:");
   TextField tfield = new TextField(3);
   
   public void init(){
      setBackground(new java.awt.Color(0, 0, 0));
      add(tfield);
      tfield.setFont(new java.awt.Font("Arial", 0, 40));
      tfield.setForeground(java.awt.Color.red);
      add(label);
      label.setBackground(new java.awt.Color(0, 0, 0));
      label.setForeground(new java.awt.Color(255, 255, 255));
      label.setFont(new java.awt.Font("Arial", 1, 16));

        add(write);
      write.addActionListener(new ActionListener (){
        public void actionPerformed(ActionEvent e){
           WriteText();
        }
     });
        add(read);
      read.addActionListener(new ActionListener (){
        public void actionPerformed(ActionEvent e){
           ReadText();
        }
     }
   );
      ReadText();
}

   public void WriteText(){
      deleteText();
      try {
            File f = new File("D:\\Software\\Source\\HTML\\points.txt");
            if(f.exists()){
               BufferedWriter out = new 
               BufferedWriter(new FileWriter(f,true));
               if(tfield.getText().equals("")){
                  JOptionPane.showMessageDialog
                  (null,"Please enter your text!");
                  tfield.requestFocus();
               }
               else{
                  out.write(tfield.getText());
                  if(f.canWrite()){
                      /*
                     JOptionPane.showMessageDialog(null,
                     "Text is written!");
                     */
                     tfield.setText("ok");
                  }
                  else{
                     JOptionPane.showMessageDialog(null,
                     "Text isn't written!");
                  }
                  out.close();
                  }
               }
            }
         catch(Exception x){
            x.printStackTrace();
         }
      }
   public void deleteText() {
	try {
        FileWriter w = new FileWriter("D:\\Software\\Source\\HTML\\points.txt");
        w.write("");
        } catch (Exception e) {
	}
    }

   public void ReadText(){
         try {
            File f = new File("D:\\Software\\Source\\HTML\\points.txt");
            if(f.exists()){
               BufferedReader in = new 
               BufferedReader(new FileReader(f));
               String str;
               while ((str = in.readLine()) != null) {
                        tfield.setText(str);
		}
               in.close();
            }
         }

         catch(Exception x){
            x.printStackTrace();
         }
      }
 }

Wenn ich das Applet über den Applet-Write-Button steuere, funktioniert das Schreiben. Also muss der Code doch passen?
Ich bin gerade sehr ratlos. Danke für eure Hilfe!
 
Zuletzt bearbeitet:
Impulse- schrieb:
... das Applet habe ich signiert. Das Applet alleine funktioniert auch wunderbar, aber wenn ich über das JavaScript die WriteText-Methode ausführen will, passiert nichts und ich sehe auch keine Fehler in der Konsole
Wenn ich das Applet über den Applet-Write-Button steuere, funktioniert das Schreiben.


:stacheln:
 
Sorry, das hab ich glatt überlesen...

Ahhm, hast du mal geschaut, was passiert, wenn du document.japp durch document.getElementById("japp") ersetzt?

Sonst noch (glaub das fehlt):
java.security.AccessController.doPrivileged bei jeder Funktion, die von javascript aus aufgerufen wird und was gefährliches macht.
 
Zuletzt bearbeitet:
kein Problem. getElementbyId bringt nichts, aber ich habe eben bemerkt, dass ich doch Fehlermeldungen wegen Zugriffsrechten bekomme. Ich hab vorhin gedacht, dass sie von vorherigen Versuchen waren :rolleyes:

java.security.AccessControlException: access denied ("java.io.FilePermission" "D:\Software\Avira\AntiVir BackUp\HTML\Source\HTML\points.txt" "write")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkWrite(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileWriter.<init>(Unknown Source)
at com.points.Points.WriteText(Points.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Warum geht das Schreiben mit dem Applet, aber nicht wenn ich die Write-Methode des Applets mit JavaScript aufrufe?
Kann ich JavaScript irgendwelche Rechte/Prioritäten geben?

Edit: Vor dem Signieren der .jar-Datei ging das Applet nicht; habe es dann im win cmd mit keytool.exe und jarsigner signiert und dann gings das Lesen/Schreiben mit dem Applet.
 
Zuletzt bearbeitet:
Das verstehe ich nicht? Also muss das Zeug irgendwie ins Applet?
 
Klappt so leider nicht (no suitable method found for doPrivileged). Aber ich hab inzwischen eine andere Lösung: JS schreibt die Variable, die gesichert werden soll in das Textfeld des Applets und mit einem Save-Button schreibt dann das signierte Applet in die Textdatei. Komischerweise funktioniert das nur ab und zu, manchmal gehts und manchmal wieder nicht (wegen fehlenden Rechten) :(
trotzdem Danke!
 
Zurück
Oben