Auslesen der Zwischenablage - Optimierung Geschwindigkeit

Tschop

Mitglied
Hallo Zusammen,

ich habe eine Frage zum Thema Auslesen der Zwischenablage.
Ich habe ein Java Programm geschrieben das unter anderem ein jTable enthält.
Ich will in einer Exceltabelle bestimme Einträge kopieren und über einen Button im Java Programm diese in die jTable schreiben.

Aus verschiedenen Gründen musste ich von Netbeans (wo ich ursprünglich angefangen habe) auf Eclipse umsteigen.
Komischerweise dauert das Einfügen aus der Zwischenablage jetzt relativ lange (ca 3-5 Sekunden). Dabei wurde der Inhalt vorher quasi mit dem Mausklick angezeigt.

Wisst Ihr vielleicht woran das liegen kann bzw wie man die Geschwindigkeit beim Einfügen aus der Zwischenablage erhöhen kann? Ist das vielleicht eine Compilersache von Eclipse?

Die Funktionen für das Einfügen habe ich im Internet gefunden und an meine Tabelle angepasst.

Beim Einfügen handelt es sich nicht um große Datensätze. Es sind 7 Spalten und in der Regel etwa 10 Datensätze.



Java:
private void putintotable() throws UnsupportedFlavorException, IOException{
        
        Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable transfer = sysClip.getContents(null);
        String data = (String) transfer.getTransferData(DataFlavor.stringFlavor);
              
        int col = 0, row = 0;
        for (int i = 0;i<data.length();i++){
            if (data.charAt(i) == '\t'){
                //neue Zelle
                String tempStr = data.substring(0,i);
                jTable1.setValueAt(tempStr, row, col);
                col++;
                data = data.substring(i+1,data.length());
                i = 0;
            }
            if(data.charAt(i) == '\n'){
                //neue Zeile
                String tempStr = data.substring(0,i);
                jTable1.setValueAt(tempStr,row,col);
                row++;
                col = 0;
                data = data.substring(i+1,data.length());
                i = 0;
            }
        }
        System.out.println(data);
        rowcount = row;
        
        
    }

Vielen Dank für die Hilfe!

Andreas Rolf
 
S

SlaterB

Gast
wie groß ist der String?
messe durch Ausgaben in Zeile 2, 6 und 29, ob allein das Erhalten des reinen Strings lange dauert oder deine restlichen Aktionen danach,
komplett unabhängig von der Zwischenablage

unter den restlichen fällt das häufige subString auf,
bei kleinen Texten bis wenige tausend Zeichen dürfte das auf heutigen Rechnern nicht zu spüren sein,
bei MB schon eher, wobei die Strings immerhin kleiner werden, das erfordert hoffentlich nicht ständiges Umkopieren sämtlicher Daten,
mindestens aber das Anlegen Millionen einzelner Objekte,

durchlaufe den String lieber einmal von Anfang bis Ende, merke dir Zeilenanfänge usw. in Indexvariablen, die auch > 0 sein können
 

Tschop

Mitglied
Vielen Dank für die schnelle Antwort.
Ich habe jetzt mal die Zeit gemessen und der Schritt
Code:
Transferable transfer = sysClip.getContents(null);
benötigt quasi 99% der Zeit.

Daran kann man vermutlich aber nicht viel ändern oder?
Komisch ist nur das es vorher bei Netbeans quasi mit dem Mausklick erledigt war und nun 3-5 Sekunden braucht.

Der String hat etwa 1000 Zeichen.
 
S

SlaterB

Gast
ungünstig für mich, dann stehe ich praktisch ohne Tipps da,
Internet-Suche auch nicht so ergiebig

hier ein Link mit einer recht naheliegenden Idee, die das Problem zwar nicht direkt angeht, aber vielleicht vorerst abmildert
Clipboard woes

nicht erst mit einem Buttonklick oder so die Zwischenablage abfragen, sondern mit einem Thread im Hintergrund,
der entweder sofort bei neuen Daten in Zwischenablage oder mindestens direkt ab Focus fürs Programm aktiv wird,

wenn der Benutzer paar Sekunden braucht bis irgendwo die Daten eingefügt werden sollen, sind sie vielleicht schon geladen,
bei ständig Excel, Klick, Java, Klick, Excel, Klick usw. Wechsel hilft es natürlich nicht ganz so sehr

vielleicht wird aber sogar die Hälfte der Klicks eingespart, wenn man die Java-Hälfte der Arbeit im Hintergrund automatisiert,

so, das reicht wohl als immerhin etwas Input in diesem Thread ;)
warum langsam oder nicht kann ich direkt nicht weiter beurteilen
 
N

nillehammer

Gast
Habe Deinen Code bei mir mit Eclipse laufen gehabt (Java 7, Windows 7 Enterprise). Ich habe die von Dir beobachtete Langsamkeit nicht reproduzieren können. Daher habe auch ich keine Performancetipps. Aaaber ich habe Code geschrieben, der etwas einfacher die Zwischenablage zeilenweise einliest. Vielleicht magst Du ihn ja auch lieber als Deinen ;):
Java:
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.BufferedReader;
import java.io.Reader;

public class TestApp {

  public static void main(String[] args) throws Exception {

    final Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();

    final Transferable transfer = sysClip.getContents(null);

    final Reader transferReader = DataFlavor.stringFlavor
        .getReaderForText(transfer);

    final BufferedReader bufferedReader = new BufferedReader(transferReader);

    String line = null;

    while ((line = bufferedReader.readLine()) != null) {
      // Hier der ganze Code für das Processing einer Zeile
      // Bis dahin erstmal System.out.println
      System.out.println(line);
    }

    bufferedReader.close();

  }
}
 

Tschop

Mitglied
Vielen Dank für eure Antworten!

Das mit dem parallelen Überprüfen der Zwischenablage, gerade wenn das Fenster zum Kopieren minimierst ist, würde bestimmt helfen. Bin mir gerade noch nicht so sicher wie ich das mit den Threads umsetze aber ich werd es mal versuchen.

Vll noch eine Anmerkung aus der ich nicht schlau werde:
Wenn ich das Programm starte, in Excel 10 Zeilen kopiere und auf den Button gehe, läd er ca. 5 Sekunden.
Wenn ich Das Programm dann komplett schließe und erneut starte, funktioniert die Funktion sofort.(sofern nichts neues in die Zwischenablage geladen wird)

Könnt ihr mir erklären weshalb das so ist? Normalweise werden doch bei einem kompletten Programmneustarten die selben Befehler nochmal ausgeführt. Somit müsste es doch wieder die 5 Sekunden dauern?

Mit freundlichen Grüßen

Andreas Rolf
 
N

nillehammer

Gast
Vll noch eine Anmerkung aus der ich nicht schlau werde:
Wenn ich das Programm starte, in Excel 10 Zeilen kopiere und auf den Button gehe, läd er ca. 5 Sekunden.
Wenn ich Das Programm dann komplett schließe und erneut starte, funktioniert die Funktion sofort.(sofern nichts neues in die Zwischenablage geladen wird)

Könnt ihr mir erklären weshalb das so ist? Normalweise werden doch bei einem kompletten Programmneustarten die selben Befehler nochmal ausgeführt. Somit müsste es doch wieder die 5 Sekunden dauern?
Habe meinen Code noch um ein Userereignis ergänzt:
Java:
    final Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();

    final Scanner scanner = new Scanner(System.in);

    // Habe keine Swing-Gui. Das hier ist der Ersatz
    // für das User-Ereignis "Klick auf den Ladebutton".
    // Es wird auf ein Return in der Console gewartet.
    scanner.nextLine();

    //...der restliche Code...
Ich habe dann -wie von Dir beschrieben- zunächst das Java-Programm über Eclipse gestartet, dann eine Exceltabelle (Office 2010) geöffnet, dort Zellen markiert und kopiert, dann in dem Programm das Return abgesetzt (also den "Lade-Button gedrückt") und alles hat geflutscht. Auch so konnte ich das von Dir beobachtete Verhalten leider nicht reproduzieren. Ich würde daher Eclipse, Excel und den spezifischen Java-Code zum Zugriff auf die Zwischenablage als Ursache für die Langsamkeit ausschließen. Greifst Du in Deiner Swing-Gui noch irgendwo anders auf die Zwischenablage zu? Vielleicht kommen diese Zugriffe sich ins Gehege.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Automatisches Auslesen der Zwischenablage plattformübergreif Java Basics - Anfänger-Themen 3
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
F Zwischenwerte aus Browser auslesen Java Basics - Anfänger-Themen 19
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
J Hashmap auslesen Java Basics - Anfänger-Themen 7
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
D String untereinander auslesen lassen Java Basics - Anfänger-Themen 2
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
dragonfight86 Erste Schritte OpenDocument auslesen Java Basics - Anfänger-Themen 13
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
Chrizzey45 Calc-Dokument in Java auslesen? Java Basics - Anfänger-Themen 2
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
Y Bildschirmauflösung auslesen Java Basics - Anfänger-Themen 4
S for schleife auslesen Java Basics - Anfänger-Themen 4
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
N JFreeChart --> TimeSeries auslesen Java Basics - Anfänger-Themen 9
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
M Metadaten OpenOffice mit Java auslesen Java Basics - Anfänger-Themen 9
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
J OpenOffice Dokumentenvariable mit Java auslesen Java Basics - Anfänger-Themen 1
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
D String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 5
Viktim Website auslesen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben