R
Rex :(
Gast
Liebe Freunde,
um einem Applet im Browser bestimmte Rechte verleihen zu können, muss man es signieren.
Das geht aber nur, wenn das Applet als JAR vorliegt.
Deshalb habe ich mein Projekt als JAR exportiert.
Der Code zum Einbinden des JAR in meine HTML-Page sieht so aus:
Der Code meines Launchers sieht so aus:
Das Problem hierbei ist, dass ein weißes (Applet) Feld im Browser ohne Fehler erscheint,
aber anscheinend nicht ausgeführt wird, da man keine Files da reinziehen kann.
Als normale Klasse eingebunden (.class - kein .jar (!)) funktioniert das Reinziehen von Files,
aber aus Sicherheitsgründen kann man bei einem signierten Applet die Daten der Datei nicht von der Platte lesen.
Also - warum wird meine Klasse nicht korrekt ausgeführt, wenn ich das ganze, wie da oben beschrieben - als .JAR in eine HTML-File einbinde?
Vielen Dank im Vorraus an euch!
MFG
Rex
um einem Applet im Browser bestimmte Rechte verleihen zu können, muss man es signieren.
Das geht aber nur, wenn das Applet als JAR vorliegt.
Deshalb habe ich mein Projekt als JAR exportiert.
Der Code zum Einbinden des JAR in meine HTML-Page sieht so aus:
Code:
<applet code="DFApplet.class" alt="!!!Sie müssen Java installieren!!!" width="99" height="91" align="absmiddle" archive="DFApplet.jar" title="Uploader">
<param name="SID" value="<?=session_id()?>" />
<param name="receiveURL" value="http://www.xxx.de/uptest.php" />
</applet>
Der Code meines Launchers sieht so aus:
Code:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
public class DFApplet extends Applet {
private String SID="10101";
private String TID="10101";
private String receiveURL;
private String orderno;
private Image img;
private InputStream serverInput;
private static DFApplet appletreference;
private JProgressBar Progress;
public void main() {
System.out.println("Init. Vers. 1.1 - WAYW_");
appletreference = this;
//Parameter aus der Webseite auslesen
SID = getParameter("SID");
TID = getParameter("TID");
receiveURL = getParameter("receiveURL");
orderno = getParameter("OID");
new DropTarget(this, new DropTargetAdapter() {
public void drop(DropTargetDropEvent e) {
try {
Transferable t = e.getTransferable();
DataFlavor d = e.getCurrentDataFlavors()[0];
e.acceptDrop(e.getDropAction());
List a = (List) t.getTransferData(d);
for (int i = 0; i < a.size(); i++) {
processFile((File) a.get(i));
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
public void processFile(final File f){
Progress = new JProgressBar(0, 100);
//setLayout( new GridLayout( 1, 1 ));
this.add(Progress);
this.validate();
new Thread(){
public void run(){
processFileImpl( f );
}
}.start();
}
public void processFileImpl(final File f) {
System.out.println("Datei erhalten!\nSende...\nTarget: "+receiveURL+"\nSID:"+SID);
try {
ClientHttpRequest transfer = new ClientHttpRequest(appletreference);
serverInput = transfer.post(
new URL("http://www.xxx.de/test/uptest.php"),
new Object[] {
"SID", SID,
"data", f});
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("Sendevorgang abgeschlossen.");
String showurl="";
String statusmessage = "INITIALISATION ERROR! - FATAL ERROR: Bitte kontaktieren Sie umgehend den Support (info@xxx.de), falls dieses Problem weiterhin besteht!";
String serverresponse = null;
try {
serverresponse = readout(serverInput);
} catch (IOException ex) {
ex.printStackTrace();
}
showurl = serverresponse;
if( "" == serverresponse){ statusmessage = "Es ist ein kritischer Verbindungsfehler aufgetreten. Wenn dieses Problem trotz mehrmaligem Versuchens weiterhin besteht, wenden Sie sich umgehend an den Support (info@xxx.de)."; showurl = "http://www.xxx.de/Pictures/attention.gif";
} else if(serverresponse.equals("101")){ statusmessage = "Zugriff für Upload verweigert!"; showurl = "http://www.xxx.de/Pictures/attention.gif";
} else if(serverresponse.equals("201")){ statusmessage = "Server wird gerade gewartet. Bitte versuchen Sie es später noch einmal!"; showurl = "http://www.xxx.de/Pictures/attention.gif";
} else if(serverresponse.equals("202")){ statusmessage = "Der Upload-Service ist gerade aus technischen Gründen nicht erreichbar. Versuchen Sie es später bitte erneut!"; showurl = "http://www.xxx.de/Pictures/attention.gif";
} else if(serverresponse.indexOf("300") != -1){ statusmessage = "OK";
} else if(serverresponse.equals("301")){ statusmessage = "Transferfehler! Ihre Datei " + f.getName() + " ist zu groß! Bitte komprimieren Sie diese und versuchen Sie es erneut!"; showurl = "http://www.xxx.de/Pictures/attention.gif";
} else if(serverresponse.equals("302")){ statusmessage = "Transferfehler! Ihre Datei " + f.getName() + " konnte nicht hochgeladen werden. Es scheint ein interner Fehler im Server aufgetreten zu sein oder ein Verbindungsfehler ihrerseits besteht. Überprüfen Sie die Verbindung zum Internet und versuchen Sie es erneut. Falls dieses Problem persitiert, bitte umgehend an den Support (info@xxx.de) wenden!";
showurl = "http://www.xxx.de/Pictures/attention.gif";
}
System.out.println("\nServer antwortet mit: " + serverresponse+"\n\n URL: "+showurl);
try {
MediaTracker mt = new MediaTracker(this);
Image pic = getImage(new URL(showurl));
pic.getScaledInstance(Applet.WIDTH, Applet.HEIGHT, pic.SCALE_SMOOTH);
mt.addImage(pic, 9);
setImage(pic);
} catch (MalformedURLException e) {
e.printStackTrace();
}
/** Mit Aufruf dieser Methode kann dem Applet zur Laufzeit von außen ein
* anderes Bild zur Anzeige übergeben werden.
*/
}
public void setImage(Image img) {
removeAll();
this.img = img;
repaint();
}
public void paint(Graphics g) {
if(img != null) {
g.drawImage(img, 0, 0, this);
}
}
public String readout(InputStream is) throws IOException {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null)
sb.append(line);
return sb.toString();
}
public void setProgressStatus(int percentage){
Progress.setValue(percentage);
// System.out.println("Percentage: "+percentage+"\n");
if(percentage == 100){ this.remove(Progress); }
repaint();
}
}
Das Problem hierbei ist, dass ein weißes (Applet) Feld im Browser ohne Fehler erscheint,
aber anscheinend nicht ausgeführt wird, da man keine Files da reinziehen kann.
Als normale Klasse eingebunden (.class - kein .jar (!)) funktioniert das Reinziehen von Files,
aber aus Sicherheitsgründen kann man bei einem signierten Applet die Daten der Datei nicht von der Platte lesen.
Also - warum wird meine Klasse nicht korrekt ausgeführt, wenn ich das ganze, wie da oben beschrieben - als .JAR in eine HTML-File einbinde?
Vielen Dank im Vorraus an euch!
MFG
Rex