java.awt.Desktop - PDF öffnen klappt nicht

Hallo,

der eine oder andere kennt vielleicht schon die neue (seit Java 6) Klasse java.awt.Desktop.
Die ist sehr praktisch zum Öffnen von Standard-Anwendungen, z.B. lässt sich so
Code:
	Desktop d = Desktop.getDesktop();
	d.browse(new URI("http://www.web.de"));
der Standard-Browser des Systems mit der übergebenen URL öffnen, ähnliches geht mit einer mailto-URI für das Standard-Emailprogramm.

Leider funktioniert das jedoch nicht bei PDFs, wenn ich folgendes versuche
Code:
d.open(new File("F:\\data\\test.pdf"));
sollte, wie ich's verstanden habe, die im Betriebssystem für PDF registrierte Anwendung (also der Acrobat Reader) aufgehen und versuchen, die Datei darzustellen.
Leider passiert bei mir nichts, also weder ist die Aktion erfolgreich, noch fliegt eine Exception.
Wenn ich jedoch mit
Code:
d.isSupported(Desktop.Action.OPEN)
überprüfe, ob die Aktion auf dieser Plattform (Windows XP) unterstützt wird, bekomme ich true zurück, also sollte es doch eigentlich gehen? PDF ist bei mir auch im System registriert, d.h. wenn ich im Windows-Explorer ein PDF doppelklicke, geht der AcrobatReader auf (wie wohl bei den meisten Leuten hier auch...:)

Ist das ein Bug in dieser noch sehr jungen Klasse, oder hat jemand schonmal bessere Erfahrungen damit gemacht?

MfG

Henning
 
Lustig - genau das Problem hatte neulich schon mal jemand.. Scheint wohl mit PDF's und Browsern zusammenzuhängen, bei mir klappt die Methode ohne Probleme, bei anderen irgendwie nicht..
Probier mal anstatt open auch browse zu nehmen für die PDF..

Gruß
Tobias
 
Hallo!

Also bei mir öffnet:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.Desktop;
import java.io.File;

/**
 * @author Tom
 * 
 */
public class DisplayPdfExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Desktop
                .getDesktop()
                .open(
                        new File(
                                "E:/springframework/2.0.2/spring-framework-2.0.2/docs/reference/pdf/spring-reference.pdf"));
    }

}
wie erwartet den Acrobat Reader mit dem entsprechenden Dokument.
Welche Exception bekommst du denn?

Gruß Tom
 
Hallo!

Also bei mir öffnet:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.Desktop;
import java.io.File;

/**
 * @author Tom
 * 
 */
public class DisplayPdfExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Desktop
                .getDesktop()
                .open(
                        new File(
                                "E:/springframework/2.0.2/spring-framework-2.0.2/docs/reference/pdf/spring-reference.pdf"));
    }

}
wie erwartet den Acrobat Reader mit dem entsprechenden Dokument.
Welche Exception bekommst du denn?

Gruß Tom

Ich bekomme gar keine Exception, das ist das was mich wundert. Es passiert einfach garnichts, das Programm läuft zu Ende und schließt sauber ab, aber kein AcrobatReader geht auf.

Das PDF stattdessen über .browse() im Firefox anzeigen zu lassen habe ich dann auch versucht, allerdings ebenfalls erfolglos *hmpf*

Gruß

Henning
 
Zuletzt bearbeitet:
Hallo!

Tut sich denn was wenn du:
Code:
start E:/springframework/2.0.2/spring-framework-2.0.2/docs/reference/pdf/spring-reference.pdf
in der Konsole eingibst?

Gruß Tom
 
Hallo. Ich hab folgende frage. Ich hab aus einer XML-Datei mit java eine pdf generiert. nun wollte ich per button sagen, dass die pdf generiert werden soll und gleichzeitig der acrobat-reader aufgemacht wird und die pdf angezeigt wird. nur leider bringt er mir ne exception,weil der prozess noch läuft und der acrobat somit auch nicht auf die pdf zugreifen kann. hier mal der code von meinem button(render ist die methode, die die pdf generiert):

Code:
private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setBounds(new Rectangle(407, 217, 138, 35));
			jButton1.setText("PDF generieren");
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					render();
					
					try {
						Desktop.getDesktop().open( new File( "MusikDB.pdf"));
						
						                               
					} catch (IOException e1) {
						// TODO Automatisch erstellter Catch-Block
						e1.printStackTrace();
					}

Ich hoffe, mir kann jemand helfen.
 
Sorry, hab ganz vergessen meine Methode zum rendern mit zu posten... Hier also die methode:

Code:
public static void render(){
	String path=".";
	String inputFile="MusikDB_pdf.xml";
	String outputFile=" MusikDaten.pdf";
	String foStyleSheetFile="MusikDB_pdf.xsl";
	Driver driver=new Driver();
	driver.setRenderer(Driver.RENDER_PDF);
	try{
		driver.setOutputStream(new FileOutputStream(path + outputFile));
		Source xmlSource = new StreamSource(path + inputFile);
		Source foSource = new StreamSource(path + foStyleSheetFile);
		Result res = new SAXResult(driver.getContentHandler());
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer(foSource);
		transformer.transform(xmlSource, res);
		System.out.println("PDF erfolgreich");
	}catch (Exception ex){
		System.out.println(ex.getMessage());

Wäre super, wenn ihr mir helfen könntet...
 
Der FileOutputStream ist noch geöffnet. Probier mal folgendes:

Java:
public static void render(){
	String path=".";
	String inputFile="MusikDB_pdf.xml";
	String outputFile=" MusikDaten.pdf";
	String foStyleSheetFile="MusikDB_pdf.xsl";
	Driver driver=new Driver();
	driver.setRenderer(Driver.RENDER_PDF);
	FileOutputstream fos = null;
	try {
		fos = new FileOutputStream(path + outputFile)
		driver.setOutputStream();
		Source xmlSource = new StreamSource(path + inputFile);
		Source foSource = new StreamSource(path + foStyleSheetFile);
		Result res = new SAXResult(driver.getContentHandler());
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer(foSource);
		transformer.transform(xmlSource, res);
		System.out.println("PDF erfolgreich");
		fos.close();
	} catch (Exception ex){
		System.out.println(ex.getMessage());
	} 
}
 
Zurück