Applet FileNotFoundException

Status
Nicht offen für weitere Antworten.

mäcjava

Bekanntes Mitglied
Hallo,

ich versuche in meinem Applet ein pdf zu laden. Ich arbeite mit dem PDFRenderer. Leider kann das Applet, ausgeführt im Browser, die pdf Datei nicht finden. Das hängt wahrscheinlich mit irgendwelchen Sicherheitsbestimmungen zusammen. Kann mir da jemand helfen? (Habe schon erfolglos gegoogelt.)

[Java]
File file = new File("test.pdf");


RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY,
0, channel.size());
final PDFFile pdffile = new PDFFile(buf);

// show the first page
PDFPage page = pdffile.getPage(1);
panel.showPage(page);
final int maxnum = pdffile.getNumPages();
shownum.setText("Seite: 1/"+maxnum);

[/Java]


Die Konsolen Ausgabe:
java.io.FileNotFoundException: test.pdf (Das System kann die angegebene Datei nicht finden)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at writer.create_2view(writer.java:807)
at writer$18.actionPerformed(writer.java:938)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 
Ist das Applet signiert? Sonst kann es das File-Protokoll gar nicht verwenden, solange es im Browser läuft. Dann kann es nur Ressourcen über HTTP und zwar nur vom Ursprungsserver verwenden. Kann der PDFRenderer auch mit einem InputStream instanziert werden?
 
Erstmal vielen Dank für die Antwort. Natürlich sind alle erdenklichen Dateien signiert 🙂. Wenn ich das Applet lokal ausführe, dann geht das auch (Eclipse + gestartet per Browser). Wenn ich das Applet jedoch über den localhost aufrufe, dann findet der die Datei nicht.

Verzeichnis: http://localhost/testprog/

hier leigt auch die test.pdf

???
 
ich habe auch folgendes versucht:

File file = new File("http://localhost/testprog/test.pdf");

Dann bekomm ich folgendes:

java.io.FileNotFoundException: http:\localhost\testprog\test.pdf (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)

Wie bekomme ich das richtig hin ?
 
Das Applet wird aber nicht auf localhost ausgeführt (selbst wenn, dem Applet ist zur Laufzeit die Verzeichnistruktur des Servers nicht bekannt). Der Zugriff auf eine auf dem Server liegende Ressource muss also zwangläufig über ein Netzwerkprotokoll laufen also alles andere als File. Deswegen hatte ich ja gefragt, ob sich der PDFRenderer auch mit einem InputStream zufrieden gibt. Weil den bekommt man rect schnell.
Java:
try {
  URL toPDF = new URL(getDocumentBase(), "relPathTo/Pdf.pdf");
  InputStream pdf = toPDF.openStream();
} catch(Exception e) {
  e.printStackTrace();
}
 
Zuletzt bearbeitet von einem Moderator:
Okay , das hilft mir schon weiter. Klingt ja auch logisch.

Wie integrier ich das noch in mein Applet:

[Java]

try {
URL toPDF = new URL(getDocumentBase(), "relPathTo/test.pdf");
InputStream pdf = toPDF.openStream();
} catch(Exception e) {
e.printStackTrace();
}

RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY,
0, channel.size());

final PDFFile pdffile = new PDFFile(buf);

// show the first page
PDFPage page = pdffile.getPage(1);
panel.showPage(page);
final int maxnum = pdffile.getNumPages();
shownum.setText("Seite: 1/"+maxnum);
[/Java]

??? Danke
 
Mench, dat seh' ich jetzt erst... PDFFile will ein ByteBuffer... Wenn man ein bissl Blind ist... kann man meist nichts seh'n 😀.
Aber um so besser:
Java:
try {
  URL toPDF = new URL(getDocumentBase(), "relPathTo/Pdf.pdf");
  InputStream in = toPDF.openStream();
  int rd;
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  while((rd = in.read()) != -1) {
    out.write(rd);
  }
  final PDFFile pdf = new PDFFile(ByteBuffer.wrap(out.toByteArray()));
  //...usw
} catch(Exception e) {
  e.printStackTrace();
}
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.

Zurück
Oben