Programm welches auf CMD basirende Programme öffnet (Notepad), sucht , ausführt und compiliert

PG_97

Aktives Mitglied
Guten Morgen,
der Titel sagt eigentlich schon alles. Was ich hinzufügen muss, ist das ich ein Programm geschrieben habe, welches die obigen Tätigkeiten ausführt, da es lästig ist das ganze einzutippen. Allerdings läuft es noch nicht und ich komme nicht darauf was noch fehlt. Eine Klasse soll die Kommunikation ermöglichen, die andere das Suchen und die letzte ist die die ganze Arbeit macht
Über eure Hilfe bin ich dankbar. Noch eine kleine Anmerkung die SOEC ist meine eigene, der Rest ist Fertigcode und ja ich bin Anfänger und seit 4 Wochen dabei. Sämtliche Sachen sind in der .zip Datei.

Euch ein schönes WE

Irgendetwas ist gerade schief gelaufen...
 

Anhänge

  • SOEC.zip
    2,1 KB · Aufrufe: 6

mihe7

Top Contributor
Java:
        int File[] = null;
       
        int Programm = CMD.exe();
        int Editor = notepad.exe();

Hier hast Du die Bennungskonventionen von Java nicht eingehalten: Variablennamen schreibt man in lowerCamelCase. Das sorgt für Verwirrung, weil z. B. File der Name einer häufig genutzte Klasse ist (java.io.File)... Die Klassen CMD und notepad gibt es nicht, so dass CMD.exe() und notepad.exe() keinen Sinn ergeben.

Außerdem werden die Variablen nirgends benutzt: die Zeilen können also weg.

Dann geht es weiter mit:
Java:
        if (e.getBenutzereingabe = a) {
Das geht so nicht:

1. getBenutzereingabe ist eine Methode. Methoden werden aufgerufen, indem man eine Parameterliste (die auch leer sein kann) in runden Klammern angibt. In dem Fall erwartet die Methode einen String als Prompt.

2. Mit einem "=" vergleichst Du nichts, sondern nimmst eine Zuweisung vor. Konkret versuchst Du, der Variablen e.getBenutzereingabe den Wert zuzuweisen, der in Variable a steht. Es existiert keine der beiden Variablen.

Du hast eine Klasse SpielHelfer, die hat eine Methode getBenutzereingabe. Diese Methode erwartet als Parameter einen String als Prompt und liefert einen String als Ergebnis zurück. Von der Klasse SpielHelfer hast Du eine Instanz e erzeugt.

Du schreibst also:
Java:
String eingabe = e.getBenutzereingabe("Eingabe: ");
und arbeitest dann mit eingabe in den if-Statements weiter. Willst Du prüfen, ob der Benutzer ein "a" eingegeben hat, dann sähe das z. B. so aus:
Java:
if (eingabe.equals("a")) {
Analog für andere Zeichenketten.

Dann: runtime ist nicht deklariert. Da fehlt am Anfang vermutlich noch ein Runtime runtime = Runtime.getRuntime();

Das wäre es jetzt erstmal (nur überflogen), was die Datei SOEC.java betrifft.
 

PG_97

Aktives Mitglied
...
Ich schreibe gleich die Zeilen nochmal neu, ich hatte es schon öfters, das dann funktioniert. Trotzdem befindet sich schon eine geupdatete Version im Anhang.

EDIT: Wer lesen und logisch denken kann, ist klar im Vorteil. Meine Güte bin ich manchmal dämlich!
Andere Frage, macht das System.out.printlln noch Sinn? Eigentlich nicht, wie ich das sehe. Also jetzt bei if (eingabe...)
 

Anhänge

  • Soec.zip
    2,2 KB · Aufrufe: 3
Zuletzt bearbeitet:

PG_97

Aktives Mitglied
So, dass kommt nun raus. Zeilen neu geschrieben. Dateipfad habe ich mittlerweile in FIle umbenannt. Muss ich in der SearchCN noch etwas hinzufügen, damit er weiß, wonach ersuchen soll?

C:\Users\pag\Desktop\SOEC>javac SOEC.java
SOEC.java:22: error: cannot find symbol
f.getDateipfad("CMD.exe");
^
symbol: method getDateipfad(String)
location: variable f of type SearchCN
SOEC.java:25: error: cannot find symbol
System.out.println("cd" + f.getDateipfad("Datei"));
^
symbol: method getDateipfad(String)
location: variable f of type SearchCN
SOEC.java:31: error: cannot find symbol
f.getDateipfad("CMD.exe");
^
symbol: method getDateipfad(String)
location: variable f of type SearchCN
SOEC.java:34: error: cannot find symbol
System.out.println("cd" + f.getDateipfad("Datei"));
^
symbol: method getDateipfad(String)
location: variable f of type SearchCN
SOEC.java:40: error: cannot find symbol
f.getDateipfad("notepad.exe");
^
symbol: method getDateipfad(String)
location: variable f of type SearchCN
SOEC.java:41: error: cannot find symbol
f.getDateipfad(f.getDateipfad("Datei"));
^
symbol: method getDateipfad(String)
location: variable f of type SearchCN
6 errors
 

mihe7

Top Contributor
Hier macht eigentlich fast nichts Sinn :)

Java:
            f.getDateipfad("CMD.exe");
            e.getBenutzereingabe("Datei");
            runtime.exec("CMD");
            System.out.println("cd" + f.getDateipfad("Datei"));
            //push "Eingabe";
            System.out.println("java " + e.getBenutzereingabe("Dateiname"));
            //push "Eingabe";
1. Was bringt die erste Zeile?
2. Was bringt die zweite Zeile?
3. runtime.exec: führt CMD aus (aber nicht das Ergebnis von f.getDateipfad)
4. Dann wird ein "cd" + Pfad zu irgendeiner Datei ausgegeben.
5. Dann wird "java " + eine Benutzereingabe (für "Dateiname") ausgegeben

Kurz: was soll das ganze werden?
 
K

kneitzel

Gast
Also mir wäre es lieber, wenn Du den Code, auf den es Dir ankommt, in Code Tags direkt posten würdest. Wenn Du der Meinung bist, dass dies zu groß wird, dann pack es noch zusätzlich in einen Spoiler (Wobei es ja nicht so viel Code ist!)

Bezüglich Deines catch: Da kannst Du eine Ausgabe machen. Aber da würde ich auch noch den Stacktrace mit ausgeben um mehr Informationen zu haben....

Du suchst nach der cmd.exe? Oder was macht der Code? cmd.exe findet sich in der Umgebungsvariablen COMSPEC, welche Du z.B. mittels System.getenv auslesen könntest.
 

PG_97

Aktives Mitglied
Ich komme gerade nicht ganz hinterher. Diese if Statesment sollen eigentlich nur sagen, wenn eben bei a, b oder c + Datei eingegeben wird, das er dies sucht, compiliert, öffnet oder startet.

Den letzten Block kann man ja ruhig erstmal hinten anstellen. Meine bisherigen Programme laufen ja alle über CMD, weiter bin ich nicht, da das ganze Pfad eingeben (ich bin sehr fleißig was Ordner erstellen betrifft/Ordnung muss sein) usw. mich nervt. Damit das ganze läuft war mein Gedankengang öffne CMD und gehe in den Pfad und starte/Kompiliere das Programm. Da er ja wissen muss wo es ist muss er ja den Computer durchsuchen. Zudem befinden sich nicht die Programme im Ordner Programme, daher den ganzen Computer.
So in etwa habe ich es jetzt aufgeschrieben. Anscheinend nicht ganz Richtig.
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Also mein Tipp wäre, einfach einmal ein Java Tutorial durchzugehen, ehe Du so weiter bastelst. Es ist aus meiner Sicht sinnvoller, erst einmal die Grundlagen kontrolliert zu lernen als ohne Basiswissen irgendwas zu basteln.

Das, was Du jetzt schon hast ist um ein vielfaches zu komplex und Du hast gleich 3 Baustellen offen. (Wenn ich etwas entwickle, dann achte ich darauf, so wenig Baustellen wie möglich zu öffnen um eben den Überblick zu behalten.)

So hat Deine Klasse SearchCN nur eine Methode searchFile, welche zwei Parameter nimmt. Aber Du versuchst, da eine Methode getDateipfad aufzurufen.
Dann sollte eine Methode getDateipfad ja etwas zurück geben, aber das ist für Dich ohne Interesse wie es scheint.

Das nur um etwas offensichtliches anzusprechen. Das könnte man hier alles nach und nach erläutern, aber dann schreiben wir, was Du z.B. im freien Buch java ist auch eine Insel direkt online lesen könntest....
 

mihe7

Top Contributor
Du rufst aktuell Methoden auf, die es nicht gibt, verwendest Methoden als Variablen, hast Variablen, die Du nicht brauchst, greifst auf nicht existente Variablen zu -> das ist alles noch sehr unstrukturiert.

Fang erstmal mit der SearchCN-Klasse an und schreib die soweit fertig, dass Sie funktioniert, d. h. Du sie auch verwenden kannst und in einem Test auch verwendest.
 

PG_97

Aktives Mitglied
So, nun habe ich es geschafft ein Programm zu schreiben, welches ausführt und compiliert. Jedoch ist es starr bzw. kann nur 1 eine Sache. Hat jemand eine Idee wie er flexibel bzw. auch andere Sachen sucht compiliert und ausführt?

Code:
import java.io.*;

public class Cmd {

   public static void main(String[] args) {
      try {
         Process process = Runtime.getRuntime().exec("conhost java EinfachesDotComTestlauf", null, new File("C:\\Users\\pag\\Documents\\DC"));
         System.out.println("Führe aus");
         process.waitFor();
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}
 
K

kneitzel

Gast
Du hattest ja schon ein paar Ansätze. Die kann man ja durchaus verwenden. Und den Befehl, den Du ausführst, kannst Du ja beliebig zusammen setzen....
 

PG_97

Aktives Mitglied
Noch etwas spezifischer, als nächstes möchte ich erstmal den Dateinamen individuell eingeben. Allerdings läuft die Verknüpfung recht gut, allerdings hapert es an der Stellung der Befehle. Der Compiler sagt immer, Nein das geht nicht.
 
K

kneitzel

Gast
Dann zeig doch, wo der Compiler meckert. Ohne Detail kann ich nur sagen: Dann hast Du da etwas falsch gemacht.
 

PG_97

Aktives Mitglied
Der Dateiname fuktioniert nun einwandfrei. Allerdings kriege ich den Suchindex für den Dateipfad nicht richtig umgesetzt.
Einmal der Code vom beiden und Danke euch für die Tatkräftige Unterstützung!
Einmal die Suchklasse:

Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class SearchCN {
   
    SpielHelfer helfer = new SpielHelfer();
    String ab = helfer.getBenutzereingabe(" ");
     
    File f = new File("C:\\Programme");
    File[] fileArray = f.listFiles();

    public ArrayList<File> searchFile(File dir, String find) {

    File[] files = dir.listFiles();                            //Achtung Namensänderung muss noch Erfolgen. files durch etwas ersetzten, was nach der Benutzereingabe sucht.
    ArrayList<File> matches = new ArrayList<File> ();
    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            if (files[i].getSpielHelfer().equalsIgnoreCase(find)) { // überprüft ob der Dateiname mit dem Suchstring
                                     // übereinstimmt. Groß-/Kleinschreibung wird
                                     // ignoriert.
                matches.add(files[i]);
            }
            if (files[i].isDirectory()) {
                matches.addAll(searchFile(files[i], find)); // fügt der ArrayList die ArrayList mit den
                                        // Treffern aus dem Unterordner hinzu
            }
        }
    }
    return matches;
    }
}

Und einmal die ausführende Klasse:
Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.io.*;

public class SOEC {
   public static void main(String[] args) {
     
      SpielHelfer helfer = new SpielHelfer();
      String xy = helfer.getBenutzereingabe(" ");
      String ab = helfer.getBenutzereingabe(" ");
     
      ArrayList<SearchCN> file = new ArrayList<SearchCN>();
   
   
      if (xy.equals("a")) {
          try {
            Process process = Runtime.getRuntime().exec("conhost java " + ab, null, new file(" "));
             process.waitFor();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
       if (xy.equals("b")) {
           try {
             Process process = Runtime.getRuntime().exec("conhost javac " + ab, null, new file(" "));
             process.waitFor();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
       if (xy.equals("c")){
           try {
             Process process = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Notepad++\\notepad++.exe " + ab, null, new file(" "));
             process.waitFor();
           } catch (Exception ex) {
               ex.printStackTrace();
           }
       }
    }
}

Ich vermute das es am File liegt.
 
Zuletzt bearbeitet:

PG_97

Aktives Mitglied
Programm läuft, allerdings, wie lasse ich das Programm für eine bestimmte Zeit zu pausieren bzw. es soll erst nach 30. Sekunden mit dem Programm weitermachen, damit das andere noch arbeiten kann.
 
Zuletzt bearbeitet:

PG_97

Aktives Mitglied
Ich habe mittlerweile das ganze WWW durchsucht und keine Lösung gefunden. Das Problem: Wenn ich ein Programm über ein anderes starte, so öffnet es sich in ein neues Fenster wird dann aber geschlossen, da das andere Programm zu Ende ist. Kann mir jemand sagen, wie ich die Prozesse unabhängiger machen kann oder das das Programm wartet bis das andere fertig ist? Mit der Sleep Methode komme ich nicht weiter, da ja das gesamte Programm gefriert.
Gibt es da eine "warte" Methode oder so etwas ähnliches für CMD, mit Notepad funktioniert es einwandfrei?

Ich stelle euch einfach mal den Code zur Verfügung:
Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.io.*;

public class SOEC {
   public static void main(String[] args) {
     
      File ef;
     
      SpielHelfer helfer = new SpielHelfer();
      String xy = helfer.getBenutzereingabe(" ");
      String ab = helfer.getBenutzereingabe(" ");
      String gh = helfer.getBenutzereingabe(" ");
     
      SearchCN search = new SearchCN();
      ArrayList<File> cd = search.searchFile(new File ("C:\\Users\\pag\\Documents\\Java"), gh);
      if (cd.size() == 1) {
          ef = cd.get(0);
      } else {
          return;
      }
     
      if (xy.equals("a")) {
          try {
            System.out.println("Programm laeuft.");
            Process process = Runtime.getRuntime().exec(" conhost.exe java " + ab, null, ef);
            process.waitFor();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
       if (xy.equals("b")) {
           try {
             Process process = Runtime.getRuntime().exec(" conhost.exe javac " + ab, null, ef);
             process.waitFor();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
       if (xy.equals("c")){
           try {
             Process process = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Notepad++\\notepad++.exe " + ab, null, ef);
             process.waitFor();
           } catch (Exception ex) {
               ex.printStackTrace();
           }
       }
    }
}
 
Zuletzt bearbeitet:

PG_97

Aktives Mitglied
Hat nun alles geklappt!!! Allerdings hängt sich CMD auf und dies nach einer bestimmten Anzahl von Benutzereingaben einesw winzigen Programms(Schiffe Versenken auf CMD mit einem unsichtbaren Virtuellen Raster). Hat jemand Ahnung davon?
 

PG_97

Aktives Mitglied
Für alle die ein solches Programm ebenfalls wollen:
É-Voula ein Fertigcode:
Klasse SOEC:

Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.io.*;

public class SOEC {
   public static void main(String[] args) {
      
      
      File ef;
      
      SpielHelfer helfer = new SpielHelfer();
      String xy = helfer.getBenutzereingabe(" ");
      String ab = helfer.getBenutzereingabe(" ");
      String gh = helfer.getBenutzereingabe(" ");
      
      SearchCN search = new SearchCN();
      ArrayList<File> cd = search.searchFile(new File ("C:"), gh);
      if (cd.size() == 1) {
          ef = cd.get(0);
      } else {
          return;
      }
      
      if (xy.equals("a")) {
          try {
            System.out.println("Programm laeuft.");
            Process process = Runtime.getRuntime().exec("conhost.exe java " + ab, null, ef);
            process.waitFor();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
       if (xy.equals("b")) {
           try {
             Process process = Runtime.getRuntime().exec("conhost.exe javac " + ab, null, ef);
             process.waitFor();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
       if (xy.equals("c")){
           try {
             Process process = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Notepad++\\notepad++.exe " + ab, null, ef);
             process.waitFor();
           } catch (Exception ex) {
               ex.printStackTrace();
           }
       }
    }
}

Die Klasse SearchCN:
Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class SearchCN {
    
    //SpielHelfer helfer = new SpielHelfer();
    //String ab = helfer.getBenutzereingabe(" ");
      
    //File f = new File("C:\\Programme");
    //File[] fileArray = f.listFiles();

    public ArrayList<File> searchFile(File dir, String find) {

        File[] files = dir.listFiles();
        ArrayList<File> matches = new ArrayList<File> ();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if (files[i].getName().equalsIgnoreCase(find)) { // überprüft ob der Dateiname mit dem Suchstring
                                         // übereinstimmt. Groß-/Kleinschreibung wird
                                         // ignoriert.
                    matches.add(files[i]);
                }
                if (files[i].isDirectory()) {
                    matches.addAll(searchFile(files[i], find)); // fügt der ArrayList die ArrayList mit den
                                            // Treffern aus dem Unterordner hinzu
                }
            }
        }
        return matches;
    }
}

Und für die Kommunikation:
Code:
import java.io.*;
public class SpielHelfer {
    public String getBenutzereingabe(String prompt) {
        String eingabeZeile = null;
        System.out.print(prompt + " ");
        try {
            BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
            eingabeZeile = is.readLine();
            if (eingabeZeile.length() == 0 ) return null;
            } catch (IOException e) {
            System.out.println("IOException: " + e);
            }
        return eingabeZeile;
    }
}
 

PG_97

Aktives Mitglied
Also ich habe jetzt eine letzte Frage. Mit allen Prgrammen läuft es nun, außer mit der Command Zeile(CMD o. PowerShell). Hat jemand eine Ahnung ob irgendwo in meinen Codes etwas enthalten ist, das CMD abstürzen lässt?
Nach x Eingaben, schmiert CMD o. PowerShell nämlich ab...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
A Code in Programm wandeln, wie? Spiele- und Multimedia-Programmierung 3
J Pong Programm Spiele- und Multimedia-Programmierung 1
J Programm "fehlerhaft" als .jar Spiele- und Multimedia-Programmierung 4
P schach programm- wo anfangen? Spiele- und Multimedia-Programmierung 13
J Programm kann Audio Datei nicht finden Spiele- und Multimedia-Programmierung 7
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
B Mein Programm reagiert nicht auf den Tasstendruck Spiele- und Multimedia-Programmierung 1
C Mein Programm wird sofort terminated Spiele- und Multimedia-Programmierung 8
A Minecraft Minecraft, Programm funktioniert nur in Eclipse richtig Spiele- und Multimedia-Programmierung 24
P Quiz-Programm Spiele- und Multimedia-Programmierung 4
F Screenshot Programm nach Exception weiterlaufen lassen? Spiele- und Multimedia-Programmierung 9
Q AudioClip hängt Programm auf Spiele- und Multimedia-Programmierung 7
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
C Minecraft Minecraft-Programm: Server anpingen Spiele- und Multimedia-Programmierung 2
J Suche 3D Programm für jMonkeyEngine Spiele- und Multimedia-Programmierung 5
S Kann mir wer verraten wie mann ein java programm Starten? Spiele- und Multimedia-Programmierung 4
U Value in Programm ändern? Spiele- und Multimedia-Programmierung 5
F Programm für Bildbearbeitung gesucht: Skalieren und Speichern Spiele- und Multimedia-Programmierung 6
S Programm hängt sich auf wenn Lied abspielt Spiele- und Multimedia-Programmierung 4
D VOte programm aber wie ?? Spiele- und Multimedia-Programmierung 8
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
S Java 3D Szenegraph programm Spiele- und Multimedia-Programmierung 3
W Programm hängt manchmal Spiele- und Multimedia-Programmierung 5
G AffineTransform macht programm immer langsamer Spiele- und Multimedia-Programmierung 3
M warum funkt dieses Programm nicht? (Menübar, Java 3D) Spiele- und Multimedia-Programmierung 2
G Simples Programm sollte laufen? Spiele- und Multimedia-Programmierung 8
A Programm für ein Backgammon (tavli) Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Plugin, welches nur bestimmten Block zum bebauen festlegt Spiele- und Multimedia-Programmierung 26
P Welches 3D für Games und wie anfangen? Spiele- und Multimedia-Programmierung 9

Ähnliche Java Themen

Neue Themen


Oben