Hello @ all,
die Überschrift ist nicht ganz passend.
Ich hab mir ein Programm geschrieben das startet wenn ich eine E-Mail bekomme, aber das Problem ist wenn ich mehere E-Mails bekomme, öffnet sich das Programm auch mehr mals. Wie kann ich das Programmieren das das Programm schaut ob es schon geöffnet ist?
public class E_Mail extends JFrame {
// Anfang Attribute
public static int a=0;
private JButton j = new JButton();
private JLabel bild = new JLabel();
// Ende Attribute
public E_Mail(String title) {
// Frame-Initialisierung
super(„E-Mail“);
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
int frameWidth = 200;
int frameHeight = 150;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);
// Anfangonenten
cp.add(j);
bild.setBounds(10, 10, 173, 103);
bild.setIcon(new ImageIcon(this.getClass().getResource(„brief.png“)));
bild.addMouseListener( new MouseAdapter() { @Override public void mouseClicked( MouseEvent e ) {
if ( e.getClickCount() == 1 ){
System.exit(0);
}
}
} );
cp.add(bild);
// Ende Komponenten
addWindowListener(new WindowAdapter(){
public void windowIconified(WindowEvent e){
setExtendedState(NORMAL);
}
});
setResizable(false);
setVisible(true);
setAlwaysOnTop(true);
}
public static void main(String[] args) {
new E_Mail(„E_Mail“);
}
}
Taskliste.exe > Prozessdatei.txt erzeugt eine txt mit allen Laufenden Prozessen.
In dieser txt kannst du zeilenweise nach deinem Prozess suchen. Ist er nicht aufgelistet, darf das Programm starten. Wenn nicht System.exit(0) oder so.
Musste noch nen wenig dran feilen aber der Grundstein sollte gelegt sein.
Ja, danke für die schnell antwort,
nutze Windows und diese Programm wird auch nur auf meinem Rechner laufen. Wie kann ich heraus finden wie der Prozess genant wird? Und was ist der Pfad zur Taskliste? Benutze Windows 7 und habe so etwas noch nie gehört. Wo muss ich das den in den Quellcode packen?
LG Dennis
Hi, C:\Windows\System32\tasklist.exe meinst du dies?
Eine Batch mit folgendem Inhalt:
echo.%date%.>>.prozessliste.txt
echo.%time%.>>.prozessliste.txt
tasklist.exe>>.prozessliste.txt
echo.-----.>>.prozessliste.txt
erzeugt z.B. eine Prozessliste! Der Prozess ist eig. javaw.exe
Könnte ich es auch so machen das wenn das Programm startet eine Batch startet die javaw.exe Prozess killt? Weil mit suchen und so ist’s ziemlich kompliziert
LG Dennis
Erst Filereader, dann checken ob dar Prozess gestartet ist und wenn ja töten. Wenn nein dann weiter ausführen. Kurz gesagt, den ganzen Quatsch ganz am anfang.
Hi danke für die Hilfe:smiley:
hab aber keine Ahnung wie ich einen Feilreader mache? Ich hab taskkill inerhalb von 1 sek geschrieben nur beim ausführen haberts. An welche stelle muss ich den
Runtime.getRuntime().exec(„kill.bat“);
setzen?
Lg denni
ich würde es ganz anders als dir hier bereits geraten wurde
Wenn deine APP startet, erstellt sie eine Datei, die einen freien Port enthält. Auf diesen Port (begrenzt auf 127.0.0.1) verbindet sich die App. Dann macht sie, was sie will. Ist diese Datei schon vorhanden, weiss die App, dass sie bereits vorher gestartet wurde. Sie kann dann den Port auslesen und prüfen, ob die App wirklich noch läuft (oder vielleicht abgestürzt ist). Je nach dem, was du möchtest, hast du dann mehrere Möglichkeiten:
Die neu gestartete App beendet sich und die vorher gestartete läuft weiter.
Warten, bis der Port frei wird, dann ist die vorher gestartete App fertig.
Der vorher gestarteten App auf diesem Port den Befehl zum Beenden senden. Diese sollte natürlich darauf hören.
Alles andere mit „tasklist.exe“ etc. ist in meinen Augen nur „gefrickel“. Was, wenn Microsoft in einem Update die Syntax ändert oder das Format der Ausgabe? Was, wenn du die App unter einem anderen OS einsetzen möchtest? Mit obiger Variante bist du nicht von anderen Anwendungen abhängig und sie ist auch vom Betriebssystem unabhängig.
Wenn deine APP startet, erstellt sie eine Datei, die einen
freien Port enthält.
Ich habe eig. ein JFrame erstellt ich möchte ja nicht das der Browser sich öffnet!
Auf diesen Port (begrenzt auf 127.0.0.1)
verbindet sich die App. Dann macht sie, was sie will. Ist
diese Datei schon vorhanden, weiss die App, dass sie bereits
vorher gestartet wurde. Sie kann dann den Port auslesen und
prüfen, ob die App wirklich noch läuft (oder vielleicht
abgestürzt ist). Je nach dem, was du möchtest, hast du dann
mehrere Möglichkeiten:
Die neu gestartete App beendet sich und die vorher
gestartete läuft weiter.
Das wäre die beste Variante.
Warten, bis der Port frei wird, dann ist die vorher
gestartete App fertig.
Der vorher gestarteten App auf diesem Port den Befehl zum
Beenden senden. Diese sollte natürlich darauf hören.
Alles andere mit „tasklist.exe“ etc. ist in meinen Augen nur
„gefrickel“. Was, wenn Microsoft in einem Update die Syntax
ändert oder das Format der Ausgabe? Was, wenn du die App unter
einem anderen OS einsetzen möchtest? Mit obiger Variante bist
du nicht von anderen Anwendungen abhängig und sie ist auch vom
Betriebssystem unabhängig.
Ich möchte wie du sicher schon gelesen hast, mein Java Programm nur auf meinem Windows benutzen und wenn die Syntax verändert wird änder ich meine kill.bat auch. Es gibt nur ein Problem das Programm startet und beim starten wird auch gleichzeitig der eigene Prozess gekillt:smiley:
Das heist es ist nur 1sek offen. Die Variante mit dem durchsuchen kann ich von alleine nicht umsetzen.
Naja wir werden ne lösung finden. App und JFrame sind ja ziemlich ähnlich.