Java Prozess wird nicht geschlossen

Acki

Grünschnabel
Hallo habe ein kleine Problem,

immer wenn ich ein Java Progrämmchen starte und es dannach per Klich der Windows X Buttons schliese bleibt noch ein Prozess offen. Diese Stapeln sich dann bin zum erliegen des Systems. Was muss ich in mein Programm noch einfügen um dies zu verhindern?

Danke
 
das habe ich schon drin ... trotzdem bleibt was übrig.

hier mal den code, falls das relevant ist:

Code:
import java.awt.event.*;

import javax.swing.*;

public class RegionMatches extends JFrame implements ActionListener{

	private JFrame frm;
	private JTextField txt1;
	private JTextField txt2;
	private JTextField txt3;
	private JTextField txt4;
	private JTextField txt5;
	private JButton btn1;
	private JLabel lbl;
	private JLabel lbl2;
	private JLabel lbl3;
	private JLabel lbl4;
	
	public RegionMatches() {
		
		frm = new JFrame("String charakteristik vergleichen ...");
		frm.setLocation(100, 100);
		frm.setSize(450, 200);
		frm.setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		txt1 = new JTextField();
		txt1.setLocation(20, 20);
		txt1.setSize(200,20);
		frm.add(txt1);
		
		txt2 = new JTextField();
		txt2.setLocation(20, 50);
		txt2.setSize(200,20);
		frm.add(txt2);
		
		lbl2 = new JLabel("Index String1:");
		lbl2.setLocation(20, 80);
		lbl2.setSize(100, 20);
		frm.add(lbl2);
		txt3 = new JTextField();
		txt3.setLocation(110, 80);
		txt3.setSize(20,20);
		frm.add(txt3);
				
		lbl3 = new JLabel("Index String2:");
		lbl3.setLocation(150, 80);
		lbl3.setSize(100, 20);
		frm.add(lbl3);
		txt4 = new JTextField();
		txt4.setLocation(240, 80);
		txt4.setSize(20,20);
		frm.add(txt4);
		
		lbl4 = new JLabel("Anzahl der Chars:");
		lbl4.setLocation(280, 80);
		lbl4.setSize(100, 20);
		frm.add(lbl4);
		txt5 = new JTextField();
		txt5.setLocation(390, 80);
		txt5.setSize(20,20);
		frm.add(txt5);
		
		btn1 = new JButton("Vergleichen...");
		btn1.setLocation(250, 20);
		btn1.setSize(150, 50);
		btn1.addActionListener((ActionListener) this);
		frm.add(btn1);
		
		lbl = new JLabel("blubb");
		lbl.setLocation(20, 110);
		lbl.setSize(350, 20);
		frm.add(lbl);
		
		frm.setVisible(true);
	}
	
	public static void main(String[] args) {
		RegionMatches rgn = new RegionMatches();
	}

	public void actionPerformed(ActionEvent ae) {
		String a = txt1.getText();
		String b = txt2.getText();
		
		boolean c = a.regionMatches(Integer.parseInt(txt3.getText()), b, Integer.parseInt(txt4.getText()), Integer.parseInt(txt5.getText()));
		
		String ausgabe = "Das Ergebniss des vergleichs ergibt: Die Strings sind " + ((c == true)? "gleich":"unterschiedlich");
		lbl.setText(ausgabe);
	}
	
	
	
}
 
Hallo!

Wenn du genau hinschaust, dann wirst du sehen, dass du eigentlich zwei Frames baust.
Du setzt zwar bei einem EXIT_ON_CLOSE, jedoch wird dieser nicht mit setVisible(true) sichtbar gemacht... an dem anderen (sichtbaren) Frame hast du keine Schließlogik implementiert....

Gruß Tom
 
ah, danke für die antwort.
lösung also:

frm.setDefault ....


nur was du mit 2 frames meinst, glaube ich net ganz verstanden zu haben
 
Zuletzt bearbeitet:
Hallo,

du hast 2 Frames
Code:
public class RegionMatches extends JFrame
Code:
frm = new JFrame("String charakteristik vergleichen ...");
Der 2. Frame wird nicht benötigt, wenn du es so machst, ist das ok:
Code:
public RegionMatches() {
  		setLocation(100,100);
      		setSize(200,200);
      		getContentPane().setLayout(null);
      		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      		txt1 = new JTextField();
   		getContentPane().add(txt1);
 .......
 
Zuletzt bearbeitet:
also ich habe im Konstruktor einen WindowListener
Code:
        //Code zum Schließen des Fensters
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

dann benötige ich keinen zweiten Frame. Welche Lösung nun eleganter ist weiß ich aber nicht.

MfG
illaX
 
Hallo,

schreib zu deinem
Code:
frm.setVisible(true);
einfach noch ein
Code:
 setVisible(true);
dazu, dann wirst du sehen, das du 2 Frames hast. Denn du erzeugst, wie oben beschrieben 2 Frames.

Hier dein Code mit einem Frame:
Code:
import java.awt.event.*;
   
   import javax.swing.*;
   
   public class RegionMatches extends JFrame implements ActionListener{
   
   	private JTextField txt1;
   	private JTextField txt2;
   	private JTextField txt3;
   	private JTextField txt4;
   	private JTextField txt5;
   	private JButton btn1;
   	private JLabel lbl;
   	private JLabel lbl2;
   	private JLabel lbl3;
   	private JLabel lbl4;
   	
   	public RegionMatches() {
   		
   		super("String charakteristik vergleichen ...");
   		setLocation(100, 100);
   		setSize(450, 200);
   		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   		
   		txt1 = new JTextField();
   		txt1.setLocation(20, 20);
   		txt1.setSize(200,20);
   		getContentPane().add(txt1);
   		
   		txt2 = new JTextField();
   		txt2.setLocation(20, 50);
   		txt2.setSize(200,20);
   		getContentPane().add(txt2);
   		
   		lbl2 = new JLabel("Index String1:");
   		lbl2.setLocation(20, 80);
   		lbl2.setSize(100, 20);
   		getContentPane().add(lbl2);
   		txt3 = new JTextField();
   		txt3.setLocation(110, 80);
   		txt3.setSize(20,20);
   		getContentPane().add(txt3);
   				
   		lbl3 = new JLabel("Index String2:");
   		lbl3.setLocation(150, 80);
   		lbl3.setSize(100, 20);
   		getContentPane().add(lbl3);
   		txt4 = new JTextField();
   		txt4.setLocation(240, 80);
   		txt4.setSize(20,20);
   		getContentPane().add(txt4);
   		
   		lbl4 = new JLabel("Anzahl der Chars:");
   		lbl4.setLocation(280, 80);
   		lbl4.setSize(100, 20);
   		getContentPane().add(lbl4);
   		txt5 = new JTextField();
   		txt5.setLocation(390, 80);
   		txt5.setSize(20,20);
   		getContentPane().add(txt5);
   		
   		btn1 = new JButton("Vergleichen...");
   		btn1.setLocation(250, 20);
   		btn1.setSize(150, 50);
   		btn1.addActionListener((ActionListener) this);
   		getContentPane().add(btn1);
   		
   		lbl = new JLabel("blubb");
   		lbl.setLocation(20, 110);
   		lbl.setSize(350, 20);
   		getContentPane().add(lbl);
   		setVisible(true);
   	}
   	
   	public static void main(String[] args) {
   		RegionMatches rgn = new RegionMatches();
   	}
   
   	public void actionPerformed(ActionEvent ae) {
   		String a = txt1.getText();
   		String b = txt2.getText();
   		
 	boolean c = a.regionMatches(Integer.parseInt(txt3.getText()), b, Integer.parseInt(txt4.getText()), Integer.parseInt(txt5.getText()));
   		
 	String ausgabe = "Das Ergebniss des vergleichs ergibt: Die Strings sind " + ((c == true)? "gleich":"unterschiedlich");
   		lbl.setText(ausgabe);
   	}
   	
   	
   	
   }
 
nun werde es akzeptieren, vielleicht auch mal verstehen ...

habe da noch eine frage, wie kann man eigentlich eine methode (z.b. actionPerformed) abbrechen.

also wenn z.b. ein übergabe wert net passt. oder in dem fall so ein textfeld leer bleibt.

Code:
if (a == ""){
 -->stop, break, exit, die?<--
}
 
Zurück