Zwischenablage

dehlen

Bekanntes Mitglied
Hey schreibe gerade ein JavaProgramm und bräcuhte eure Hilfe

ich habe ein button und wenn darauf geklickt wird dann öffnet sich eine JOptionPane
diese hat wiederum 2 buttons einen ok der nicht viel machen soll und einen Button "kopieren", der einen Text aus einem Textfeld auslesen und in die Zwischenablage kopieren soll
leider tut er das nicht.. vielleicht könnt ihr mir weiterhelfen danke!

Java:
//wir befinden uns im Action Listener des ersten button wenn er gedrückt wurde dann wir der JOptionPaneDialog augerufen 

int response =  JOptionPane.showOptionDialog(
                             null
                             , "Eingegegebener Text: "+input+"\r\n"+"Schlüssel: "+schluessel+"\r\n"+"Neuer Text:"+output
                             , "Information"               
                             , JOptionPane.YES_NO_OPTION  
                             , JOptionPane.PLAIN_MESSAGE  
                             , null                       
                             , buttons  // dieser hat 2 buttons die in meinem Programm deklariert sind            
                             , "OK"     // und zwar so : String[] buttons = {"OK","Neuen Text kopieren"};
                           );
                           switch (response) { //durch das switch prüfe ich welcher ausgewählt wurde
                case 0: 
                   
                    break;
                case 1:
               
                Clipboard clip=Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection=new StringSelection(ausgabe.getText());
clip.setContents(selection,null); //ausgabe ist das Textfeld das ausgelesen werden soll und dann kopiert werden soll
                   //bei case1 soll er nun den Text kopieren hatte es schon so versucht klappt aber nicht
                    break;
                }
 
Zuletzt bearbeitet:

Cola_Colin

Top Contributor
Da der Code bei mir so funktioniert: Was hast du für System ? Javaversion ? etc.

EDIT: wobei ich statt ausgabe.getText() einfach nur einen String "test" genommen habe. Eventuell macht ausgabe.getText Probleme ?
 

dehlen

Bekanntes Mitglied
javaversion immer die neuste, da MacOsX
ich kann ja mal den ganzen Code posten vielleicht fällt euch dann auf was falsch ist
achtung nicht erschrecken wenn der code chaotisch oder ähnliches ist :D

also meine Vigenere.java für die Algorithmen:
Java:
public class Vigenere {

private final String code; //nicht veränderbare Variable wegen final
private int count = 0; //nicht final weil sie noch verändert wird

public Vigenere(String code) { //Konstruktor
this.code = code; //Zuweisung this.code soll unserem übergebenem code entsprechen
}


//Verschlüsseln
public char encode(char chr) { 
int c = chr; //int c soll unserem übergebenem chr entsprechen

if (c > 64 && c < 91) { //liegt es im Berreich ?! A-Z (siehe ASCII Tabelle)
int code = this.code.charAt(count) - 65; //"Schlüssel wir generiert",jeder Buchstabe bekommt einen Wert
c += code;

if (c > 90) { //liegt der Wert in unserem Bereich ?
c-=26;
}
count = (count < this.code.length() -1) ? ++count : 0; //? = falls dies wahr ist
}
return (char) c; //c wird zurückgegeben
}
//Entschlüsseln

public char decode(char chr) { //selbe wie encode nur 
int c = chr;

if (c > 64 && c < 91) {
int code = this.code.charAt(count) - 65;
c -= code;

if (c < 65) { //Abfrage ob Wert unter 65 liegt anstatt größer als 90
c+=26;//dementsprechend + anstatt -
}
count = (count < this.code.length() -1) ? ++count : 0; 
}
return (char) c;
}
}

und dann mein Interface.java für die GUI

Java:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.datatransfer.*;



public class Interface extends JApplet
{
JTextField eingabe,schluesselfeld,ausgabe;
JButton entschluesseln,verschluesseln;
JLabel oben,mitte,unten;

String input;
String schluessel;
String[] buttons = {"OK","Neuen Text kopieren"};





    public void init()
    {
    
     
     resize(300, 300);

     entschluesseln = new JButton("verschlüsseln");
     verschluesseln = new JButton("entschlüsseln");


     eingabe = new JTextField("");
     schluesselfeld = new JTextField("");
     ausgabe = new JTextField("");
     
     oben = new JLabel("zu entschlüsselnder Text");
     mitte = new JLabel("Schlüsselwort");
     unten = new JLabel("verschlüsselter Text");
     
     entschluesseln.addActionListener(new Encoding());
     verschluesseln.addActionListener(new Decoding());



     
     setLayout(null);
     eingabe.setBounds(25, 25, 230, 50);
     schluesselfeld.setBounds(25,90,230,50);
     ausgabe.setBounds(25,155,230,50);
     
     entschluesseln.setBounds(23,220,115,25);
     verschluesseln.setBounds(140,220,115,25);


     
     
     oben.setBounds(27,10,230,15);
     mitte.setBounds(27,78,230,15);
     unten.setBounds(27,143,230,15);
     
     add(entschluesseln);
     add(verschluesseln);
     add(eingabe);
     add(ausgabe);
     add(schluesselfeld);
     add(oben);
     add(mitte);
     add(unten);

     
      

     

    }
  
 class Encoding implements ActionListener {
    public void actionPerformed(ActionEvent e) {
       input= eingabe.getText();
       input = input.toUpperCase();
       schluessel = schluesselfeld.getText();
       schluessel = schluessel.toUpperCase();
       Vigenere Buchstabe = new Vigenere(schluessel);
       StringBuilder output = new StringBuilder();
       
       for(char i : input.toCharArray())
            
            output.append(Buchstabe.encode(i));
            ausgabe.setText(""+output);
            
            int response =  JOptionPane.showOptionDialog(
                             null
                             , "Eingegegebener Text: "+input+"\r\n"+"Schlüssel: "+schluessel+"\r\n"+"Neuer Text:"+output
                             , "Information"               
                             , JOptionPane.YES_NO_OPTION  
                             , JOptionPane.PLAIN_MESSAGE  
                             , null                       
                             , buttons                    
                             , "OK"    
                           );
                           switch (response) {
                case 0: 
              
                    break;
                case 1:
           [COLOR="Red"]Hier muss der Code zum kopieren hin!![/COLOR]
                    break;
                }
              
             
            
            
           
        
    }
}


 class Decoding implements ActionListener {
public void actionPerformed(ActionEvent e) {



       input= eingabe.getText();
       input = input.toUpperCase();
       schluessel = schluesselfeld.getText();
       schluessel = schluessel.toUpperCase();
       Vigenere Buchstabe = new Vigenere(schluessel);
       StringBuilder output = new StringBuilder();
       String ausgabetext = new String(output);
       
       for(char i : input.toCharArray())
            
            output.append(Buchstabe.decode(i));
            
            ausgabe.setText(""+output);
            
            int response =  JOptionPane.showOptionDialog(
                             null
                             , "Eingegegebener Text: "+input+"\r\n"+"Schlüssel: "+schluessel+"\r\n"+"Neuer Text:"+output
                             , "Information"               
                             , JOptionPane.YES_NO_OPTION  
                             , JOptionPane.PLAIN_MESSAGE  
                             , null                       
                             , buttons                    
                             , "OK"    
                           );
                           switch (response) {
                case 0: 
                  
                    break;
                case 1:
               
                
                    [COLOR="Red"]Hier muss der Code zum kopieren hin!![/COLOR]
         
                    break;
                }
            
            
        }
    }
    
   
  


}
 

eRaaaa

Top Contributor
Ist das der gesamte Code? Oder anders gefragt: Beendet sich danach dein Programm direkt? Bei mir unter Linux(Ubuntu) wird nämlich die Zwischenablage geleert sobald sich das Programm beendet (wenn es offen bleibt, ist der String ohne Probleme in der Zwischenablage), evtl. ist das dein Problem?

/EDIT: ah da isser - also bei mir gehts ...
 
Zuletzt bearbeitet:

dehlen

Bekanntes Mitglied
kompletten code nun nachgerreicht und ich habe auf meinem mac eine zusatzsoftware die die letzten 40 kopierten texte speichert und da ist es auch nicht dabei
habe nun mal den code zum kopieren aus den switch anweisungen rausgenommen udn werde nun noch mal schauen
 

dehlen

Bekanntes Mitglied
/EDIT: ah da isser - also bei mir gehts ...

Wie bei dir klappts wenn du meinen Code nimmst und dann folgendes in
Java:
case 1:
Clipboard clip=Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection=new StringSelection(ausgabe.getText());
clip.setContents(selection,null);
break;
}

case1 schreibst?
vllt kann java ja auch nicht auf die zwischenablage in mac osx zugreifen bzw vllt mache ich irgendwas falsch poste doch mal bitte deine version wie es klappt...
also das Programm an sich funktioniert bei mir auch einwandfrei nicht das wir uns missverstehen
lediglich die ausgabe wird nicht in die zwischenablage kopiert wenn ich den button drücke
 

eRaaaa

Top Contributor
also das Programm an sich funktioniert bei mir auch einwandfrei nicht das wir uns missverstehen
lediglich die ausgabe wird nicht in die zwischenablage kopiert wenn ich den button drücke

Tun wir nicht :)
Aber wie gesagt, sobald das Programm noch läuft(also direkt nach dem Buttonklick) kann ich den Text aus der Zwischenablage rausholen, sobald ich das Programm beende ist die Zwischenablage leer! Ich benutze dein Programm so wie du es gepostet hast mit dme case1 + Clipboard, allerdings im Appletviewer. Generell muss man das Applet doch bestimmt signieren um an die Zwischenablage zugreifen zu können oder? Solltest dann aber auch eine Exception erhalten ....Allerdings weiß ich da auch nicht mehr drüber, jmd anderes vllt? :)
 

dehlen

Bekanntes Mitglied
hm ok alles sehr komisch :D
werde nun mal meine virtualbox anschmeißen und das Programm auf Windows testen vllt liegts einfach an Mac

EDIT:

war gerade an Windows und es klappt nicht -.-
ich benutze auch den appletviewer
wie kann das sein das es bei euch klappt und bei mir nicht
also entweder ihr schreibt noch was dazu oder ich lass was aus :D
meine switch anweisung sieht so aus:

Java:
switch (response) {
                case 0: 
                    
                    break;
                case 1:
                Clipboard clip=Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection=new StringSelection(ausgabe.getText());
clip.setContents(selection,null);
               

          
                    break;
                }

also wenn ihr es genauso habt dann kann da ja irgendwas nicht stimmen :D

EDIT:
JETZT KLAPPTS !!
aber nur weil ich jetzt eclipse genommen habe wenn ich bluej nehme klappt es nicht -.-
wie kann das sein :D
 
Zuletzt bearbeitet:

dehlen

Bekanntes Mitglied
Sry für Doppelpost vorab schon einmal ;-)
also Problem ist nun das es nur in eclipse klappt aber ich das Projekt in bluej abegeben muss
wenn ich es in html einbinde oder per terminal öffne klappt es auch nicht nur mit eclipse -.-

allerdings wenn ich es im terminal eingebe dann schreibt er sobald ich auf den button klicke folgende fehlermeldung:

Java:
Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
	at java.security.AccessController.checkPermission(AccessController.java:546)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkSystemClipboardAccess(SecurityManager.java:1377)
	at apple.awt.CToolkit.getSystemClipboard(CToolkit.java:997)
	at Interface$Encoding.actionPerformed(Interface.java:106)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6352)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6117)
	at java.awt.Container.processEvent(Container.java:2085)
	at java.awt.Component.dispatchEventImpl(Component.java:4714)
	at java.awt.Container.dispatchEventImpl(Container.java:2143)
	at java.awt.Component.dispatchEvent(Component.java:4544)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212)
	at java.awt.Container.dispatchEventImpl(Container.java:2129)
	at java.awt.Component.dispatchEvent(Component.java:4544)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:635)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

weiß jmd was damit anzufangen ?!
wieso klappt es in eclipse aber sonst nirgendwo ... manno :D
 

dehlen

Bekanntes Mitglied
ok habe es nun nach der Anleitung probiert so sieht meine Bat Datei aus um das Applet zu signieren:

Code:
@echo off
rem * SignTool by L-ectron-X ( Byte-Welt Forum - Powered by vBulletin )
rem *
rem * Ablauf beim Signieren
rem *
rem * Erzeugen eines eigenen Schlüssels
rem * Mit KeyTool, einem Werkzeug aus dem SDK, einen neuen Schlüssel erzeugen:
rem * keytool -genkey -alias Signer -dname "cn=Dein Name, c=de"
rem * Gib anschließend Dein Passwort ein.
rem
rem * Erzeugen eines Zertifikats
rem * Mit KeyTool Zertifikat erzeugen:
rem * keytool -selfcert -alias Signer -dname "cn=Dein Name, c=de"
rem * Gib anschließend dein Passwort ein.
rem *
rem * Signieren des Applets
rem * Signieren des Applets mit Hilfe des Tools jarsigner
rem * jarsigner signed.jar Signer
rem * Und noch einmal dein Passwort eingeben.

echo = SignTool =
echo Dieses Tool hilft beim Erzeugen von signierten jar-Dateien
echo.
echo Schritt 1: jar-Dateien erzeugen
echo -------------------------------

rem Pfad zum SDK setzen
rem --> anpassen!
set path=.;C:\Programme\Java\jdk1.6.0_20\bin

echo Manifestdatei erzeugen...
echo Manifest-Version: 1.0>manifest.mf
echo Created-by: SignTool by L-ectron-X>>manifest.mf
echo.>>manifest.mf

if exist *.jar goto key
echo jar-Datei mit angegebenen Parametern erzeugen...
rem --> anpassen!
rem * In diesem Beispiel werden alle .class-Dateien und die Verzeichnisse bilder und etc
rem * mit ins jar-Archiv gepackt.
jar cfmv MeinJar.jar manifest.mf *.class

:key
echo.
echo Schritt 2: Schluessel generieren
echo --------------------------------
rem --> anpassen!
keytool -genkey -alias Signer -dname "cn=dehlen, c=de"

echo.
echo Schritt 3: Zertifikat erzeugen
echo ------------------------------
rem --> anpassen!
rem -validity 18250 (365 Tage x 50) erzeugt ein 50 Jahre gültiges Zertifikat
keytool -selfcert -validity 3650 -alias Signer -dname "cn=dehlen, c=de"

if not exist *.jar goto error
echo.
echo Schritt 4: jar-Datei signieren
echo ------------------------------
echo jarsigner erwartet hier nochmals dein Passwort.
rem --> anpassen!
jarsigner MeinJar.jar Signer

echo.
echo Schritt 5: Zertifikat testen
echo ----------------------------
rem --> anpassen!
jarsigner -verify -verbose -certs MeinJar.jar
goto end

:error
echo.
echo Es wurde keine jar-Datei zum Signieren gefunden.
echo Die Erzeugung der jar-Datei ist moeglicherweise fehlgeschlagen.
echo Pruefe deine Eingaben in der Batchdatei!

:end
if not exist manifest.mf goto console
echo.
rem Manifest von Festplatte löschen
del manifest.mf

:console
rem Console für Ausgaben noch geöffnet lassen
echo.
pause

und so meine HTML Datei um es aufzurufen:

Code:
<html>
<head>
<title>Vigenere Verschlüsselung</title>
</head>
<body>
<center><h1><font color="FFFFFF">Vigenere Verschlüsselung</font></h1>
<applet archive="MeinJar.jar" code="meinPackage.MeinApplet" width="300" height="300">
Aktivieren Sie bitte die Java-Unterstützung für Ihren Browser!
</applet>
<security>
   <all-permissions/>
</security>
</center>
</body>
</hmtl>

ich bekomme zwar auch den dialog ob ich dem applet vertraue also die signierung scheint wohl zu funktionieren doch dann steht da : Fehler ,Klicken sie für mehr Informationen... also das Applet lädt nicht richtig

und unter Details kommt dann das hier:

Code:
Java Plug-in 1.6.0_20
Verwendung der JRE-Version 1.6.0_20-b02 Java HotSpot(TM) Client VM
Home-Verzeichnis des Benutzers = C:\Dokumente und Einstellungen\Administrator
----------------------------------------------------
c:   Konsole löschen
f:   Objekte in Finalisierungswarteschlange finalisieren
g:   Speicherbereinigung
h:   Diese Hilfemeldung anzeigen
l:   ClassLoader-Liste ausgeben
m:   Speicherbelegung anzeigen
o:   Protokollierung auslösen
q:   Konsole ausblenden
r:   Richtlinien-Konfiguration neu laden
s:   System- und Bereitstellungseigenschaften ausgeben
t:   Threadliste ausgeben
v:   Thread-Stack ausgeben
x:   ClassLoader-Cache löschen
0-5: Trace-Stufe auf <n> setzen
----------------------------------------------------


Laden: Klasse meinPackage.MeinApplet nicht gefunden
java.lang.ClassNotFoundException: meinPackage.MeinApplet
	at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: C:\Dokumente und Einstellungen\Administrator\Desktop\Vigenere -2\meinPackage\MeinApplet.class (Das System kann den angegebenen Pfad nicht finden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.io.FileInputStream.<init>(Unknown Source)
	at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
	at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
	at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
	at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	... 7 more
Ausnahme: java.lang.ClassNotFoundException: meinPackage.MeinApplet

also ist irgendwas an meiner .bat oder meiner .html Datei falsch? wenn ja was ? danke
 
Zuletzt bearbeitet:

dehlen

Bekanntes Mitglied
EDIT: Ah Super habe nun eine Main Methode reingebastelt und aus dem JAppletr ein JFrame gemacht und siehe da es funktioniert ;-)
selbst in Bluej und ohne Signierung
.... habe jetzt auch noch zusätzlich eine .jar Datei erstellt in der das ganze auch funktioniert
also vielen Dank für die Hilfe besonders an @eraaaa und dann ist der Thread hiermit geschlossen ;-)
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben