JEditorPane in Applet - Zwischenablage ansprechbar?

Charly81

Grünschnabel
Hi Leute,
mein kleines Problem sieht folgendermaßen aus:
ich habe ein JApplet mit dem der User über ein paar Eingabefelder Daten zum Server (Ursprungs-Host des Applets) schickt. Sollte nun aus irgendwelchen Gründen der Server nicht ansprechbar sein, bzw. irgendwo am Server ein Fehler passieren wird ein neues JFrame zur Information des Users geöffnet.
Darauf liegt ein JEditorPane in das ich in HTML-Tags eingefasst die entsprechende Fehlermeldung einfüge.
Nun meine Frage:
Der User soll Teile der Fehlermeldung markieren und dann kopieren bzw. ausschneiden können um sie woanders(MS Word,etc.) einfügen oder ausdrucken zu können.
Das funktioniert aber nicht. Standardmäßig sollte das doch bei allen Swing- Textkomponenten implementiert sein,oder lieg ich da falsch?
Hab auch gerade rausgefunden das es auch auf keiner der anderen Textkomponenten des Applets funktioniert (ausschneiden funktioniert schon, nur kann ich die ausgeschnittene Info nirgends einfügen).
Liegt es also daran, dass mein Applet nicht die Rechte hat auf die Zwischenablage zuzugreifen? Müßte ich es dann signieren?
Oder kann ich das ganze irgendwie andersweitig lösen?

Gruß Charly
 
Hi schnuffie,
danke für deine schnelle Antwort.
Das Problem besteht nicht in der Selektion des Textes innerhalb des JEditorPane, und auch den ausgelesenen selektierten String krieg ich in ein Transferable-Objekt.
Hier der Auszug aus dem Code (mit den Zeilennummern)
...
832 String s=jEdit.getSelectedText();
833 StringSelection ss= new StringSelection(s);
834 Toolkit tk= Toolkit.getDefaultToolkit(); //bis hier einwandfrei!
835 Clipboard cb= tk.getSystemClipboard(); //hier wird dann eine Exception geworfen
836 cb.setContents(ss,(ClipboardOwner)jEdit);
...

Auszug aus der Exception:

java.security.AccessControlException: access denied(java.awt.AWTPermission accessClipboard)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
at java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
at java.lang.SecurityManager.checkSystemClipboard(WToolkit.java:638)
at TabNewMeetingListener$9.actionPerformed(TabNewMeetingListener.java:835)
.......

Das sieht für mich nach der Applet-Sandbox aus, oder?

cu Charly
 
Ja, da wirst Du recht haben, denn prinzipiell geht das, nur Du bekommst einen "Zufriff verweigert"-Fehler. Wieder einmal sind Applets zu arg eingeschränkt. :(

Herausfinden kannst Du das zum Testen so (als Argument den Applet-Klassenname mit Package angeben):

Code:
public class AppletTester {
 
public static void main(String[] args) {
  Applet a = (Applet)Class.forName(args[0]).newInstance();
  a.init();
  a.start();
}
 
}
 
Hi!
Danke für deine schnelle Hilfe, aber es haut einfach ned hin!
Tja, leider muß ich wohl mit dem Problem leben, dass die Applets rechtemäßig ziemlich eingeschränkt sind.
Komischerweise läßt sich die Text-Selektion im JEditorPane per Buttonklick(der liegt auf einer JToolbar die ich dem JEP hinzugefügt habe) ausdrucken.
(Nutze hierzu "DocumentRenderer.java": SEHR empfehlenswert im Zusammenhang mit dem JEditorPane!
zu finden unter: http://www.fawcette.com/javapro/2002_12/online/print_kgauthier_12_10_02/) )

Dabei öffnet sich dann auf dem Client der übliche Windows-Druck-Dialog und das wäre doch auch ein Zugriff auf die System-Ressourcen des Clients aus dem AppletContext heraus, oder?!
Wieso macht also die Zwischenablage Probleme?

Gruß Charly
 
Ja könnte ich , aber ich glaube ich kann meinen inneren Schweinehund gerade noch zurückhalten! ;-]
Und auch wenn das mit der Zwischenablage (noch) nicht klappt, danke für deine Hilfestellung.

Gruß Charly
 
Zurück