Applet - Impression - Depuis une URL

yohann22 Messages postés 9 Date d'inscription mardi 10 avril 2012 Statut Membre Dernière intervention 13 avril 2012 - 23 nov. 2011 à 15:15
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 25 nov. 2011 à 23:20
Bonjour à toutes et tous !

Je me présente, je m'appelle Yohann, je suis débutant dans le monde de Java (et donc des applets !).

Je recherche de l'aide à propos de la réalisation des applets et plus particulièrement la réalisation d'une applet qui aurait pour but d'imprimer (en local, machine linux) un fichier .pdf se trouvant lui sur le serveur distant.

Mon problème est : Lorsque je renseigne l'adresse ou se trouve le .pdf, exemple ci dessous :



[...]

String fichier = "recu.pdf";
String dossier_distant = "http://tatitatta.fr/";

[...]

java.awt.Desktop.getDesktop().print(new File(dossier_distant + fichier));

[...]



Il me donne l'erreur suivante :

java.lang.IllegalArgumentException: The file: http:\tatitatta.fr\recu.pdf doesn't exist.


Il interprète donc mes " / " se trouvant dans mon url comme des " \ " et ne trouve donc pas mon fichier en question !

Avez vous une solution à mon problème ?

En attente d'une réponse qui me débloquerait !

Yohann

3 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
24 nov. 2011 à 22:03
Salut,

Je ne pense pas que File fonctionne sur autre chose que ce que tu vois dans ton système de fichier du coup tu pourrais transformer ton URL ou URI en fichier.

String fichier = "recu.pdf"; 
String dossier_distant = "http://tatitatta.fr/"; 

...
try {
  URL url = new URL(dossier_distant + fichier);
  File file = new File(url.toURI());
  // File file = new File(url.toURL());
  ....
} catch (Exception e) {
  e.printStackTrace();
}


Sinon autre méthode ICI


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
yohann22 Messages postés 9 Date d'inscription mardi 10 avril 2012 Statut Membre Dernière intervention 13 avril 2012
25 nov. 2011 à 09:30
Bah j'ai utilisé une méthode ressemblant à ton lien ^^ !

J’exécute un script qui est sur la machine client (comme j'ai accès à la machine client) cela m'enlève l'épine du pied (du téléchargement du fichier et de l'impression, vu que c'est maintenant gérer par le script..).

Mon code ressemble à ça :

import java.io.*;
import javax.swing.* ;
import java.awt.*;
import java.net.*;
import java.awt.event.*;
import java.net.URL;
import java.applet.*;

public class ImpressionDirecte {

public void init (){
JOptionPane.showMessageDialog(null, "init");
}

public static void main(String[] args) {
try {
Process p = Runtime.getRuntime().exec("sh script.sh");
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}

}


Quand je lance l'application dans Netbeans tout fonctionne, mais c'est quand je lance mon applet depuis ma page HTML que je rencontre un soucis !


java.lang.reflect.InvocationTargetException
at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(DeployAWTUtil.java:116)
at sun.plugin2.applet.Plugin2Manager.runOnEDT(Plugin2Manager.java:3521)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3052)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassCastException: ImpressionDirecte cannot be cast to java.applet.Applet
at sun.plugin2.applet.Plugin2Manager$12.run(Plugin2Manager.java:3040)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception : java.lang.reflect.InvocationTargetException


Et j'ai beau chercher sur internet, je ne trouve pas de solution ( de plus, je suis débutant en java, et en programmation, donc ca m'aide pas ^^ ! .

Voila comment j'appel mon applet depuis ma page html ^^ ! :






En attente d'une réponse,

Je vous remercie d'avance :) !

Yohann !

Ps : Mon script lance l'impression directement sur le port de cette manière " cat toto.txt > /la/ou/est/branché/l'imprimante " je sais pas si ca peut jouer ^^ !
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
25 nov. 2011 à 23:20
Salut,

Je viens de supprimer mon ancienne réponse, j'avais pas remarqué que tu n'avais pas fait l'héritage d'applet... du coup total HS...

Donc:
Ton erreur vient du fait que la JVM veut faire un cast de ta classe ImpressionDirecte en java.applet.Applet... je m'explique si tu veux que ton code s’exécute en tant qu'applet, il ne suffit pas de démarrer ta classe via un fichier html.
Un(e) applet ne s'execute pas via la fonction 'main' je te conseil de lire quelques tutos sur les bases de la création d'applet en java (exemple ICI).
Si le fichier (script) que tu vas exécuter via ton applet est sur le poste client il y faudra que tu signes (ou que tu changes les permissions) pour t'affranchir des exception de sécurités.

Cela dit, je trouve dommage de faire un(e) applet en java pour limiter l'utilisation à UNIX (pas de bash sous Windows) ...



Remarque: j'écris "un(e) applet" pour ne froisser personne.




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous