Aufbessern meines Codes

MrZylinder

Aktives Mitglied
Hallo Forum,

mein Programm das eine Datei ausließt und in einer TextArea (die in einem Frame is) ausgibts, ist fertig.

Funktioniert eigentlich alles wie es soll.

ABER: Da ich blutiger Anfänger bin würde ich gerne wissen was man an meinem Code vielleicht noch verbessern könnte bzw ordentlicher schreiben könnte.

Hier mein aktueller Code

Java:
public class PopUpTest2 {
	static JFrame frame;
	static JTextArea ta;
	static ArrayList<String> list1;
	static StringBuilder sb;
	
	public static void main(String[] args) throws IOException {
	try {
		list1 = new ArrayList<String>();
		sb = new StringBuilder();
		
                PopUpTest2 db = new PopUpTest2();
		
		final String pfad = JOptionPane.showInputDialog(frame,"Pfad zur status.dat: ");
		String hosts = JOptionPane.showInputDialog(frame,"Wie viel Hosts werden benutzt: ");
		final int eingabeAnzahl = Integer.parseInt(hosts);
		
		ScheduledExecutorService executor=Executors.newScheduledThreadPool(1);
		executor.scheduleWithFixedDelay(new Runnable(){
		    public void run()  {
		    	try {
		    		ta.setText("");
					list1.clear();
		    		BufferedReader br = new BufferedReader(new FileReader(pfad));
		    		int anzahlStatus = 0;
		    		String lesen = br.readLine();
		    		
		    		while((lesen = br.readLine()) != null && anzahlStatus < eingabeAnzahl) 
		    		{
		    			if(lesen.contains("host_name="))
		    			{
		    				list1.add(lesen);
		    			}	
		    			if(lesen.contains("current_state="))
		    			{
		    				anzahlStatus++;
		    			}
		    			if(lesen.contains("current_state=0"))
		    			{
		    				list1.add(", OK");
		    				list1.add("\r\n");
					
		    			}
		    			if(lesen.contains("current_state=1"))
		    			{
		    				list1.add(", WARNING");
		    				list1.add("\r\n");
		    			}
		    			if(lesen.contains("current_state=2"))
		    			{
		    				list1.add(", CRITICAL");
		    				list1.add("\r\n");
		    			}
		    			if(lesen.contains("current_state=3"))
		    			{
		    				list1.add(", UNKNOWN");
		    				list1.add("\r\n");
		    			}
		    			
					}
		    		
		    	}
		    	catch (FileNotFoundException e) 
		    	{
		    			JOptionPane.showMessageDialog(frame,"Datei wurde nicht gefunden!");
		    	} 
		    	catch (IOException e) 
		    	{
					
					e.printStackTrace();
				}
		    	
		        SwingUtilities.invokeLater(new Runnable(){
		        	public void run() {	        		
		            	for(int i=0;i<list1.size();i++)
		    			{
		    				ta.append(list1.get(i));
		    			}
		            	
		            }
		        });
		    }
		},0, 60, TimeUnit.SECONDS);
		
        
	} 
	finally {
		
	}
		
	
}

//Aufbau des Fensters	
public PopUpTest2() {
	frame = new JFrame ("IcingaInfo");
	ta = new JTextArea();	
	frame.setSize(400, 400);
	frame.setVisible(true);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.add(ta);
	ta.setEditable(false);	
	}

}

Im Bezug auf das Finally: Ich weis absolut nicht warum ich das hier brauch. Ich hab mich informiert und verstehe wofür das Finally steht. Ich weis auch das es normalerweise optional ist. Aber mein Eclipse meckert wenn ich es rausnehme.
 
M

Marcinek

Gast
Irgentwer meckert über iwas ist keine sehr gute Beschreibung.

Du fängst

try {

}

an und da fehlt ein catch() oder eben ein finally {}

---

Dein Code hat viel zu lange Methoden.

Dein Action Listener greift auf Attribute zu, die er eigentlich nicht sieht, aber durch die anaonyme Klasse und durch final das doch eingeschränkt geht....

Ist zudem auch viel zu lang.
 

Michael...

Top Contributor
mein Programm geht garnicht in die catch anweisung rein oO
Ist das ein Frage? Ist doch schön wenn es funktioniert.

Das finally gehört zu dem try in Zeile 8. Zu jedem try gehort mindestens ein catch oder finally (Hatte Marcinek ja bereits erläutert). Da Du scheinbar nichts definiert hast, schlägt die IDE eben ein finally vor. Und somit ist die Grammatik wieder korrekt. Allerdings macht das so nicht viel Sinn und es stellt sich die Frage wofür überhaupt das try in Zeile 8?

Der Programmaufbau ist nicht sonderlich schön. Grundsätzlich gehört in die main Methode möglichst wendig Code - im Idealfall nur eine Zeile. Variablen die eigentlich Instanzvariablen sein sollten sind bei Dir static (Weiß nicht ob Dir die Bedeutung von static überhaupt klar ist). Variablennamen sollten sprechend sein. Wird die StringBuilder Variable sb überhaupt verwendet.

Mit
Code:
 String lesen = br.readLine();
vor der while Schleife liest Du die erste Zeile ein und verwirfst sie. Kann man denn sicher davon ausgehen, dass die erste Zeile immer irrelevant ist?
 

MrZylinder

Aktives Mitglied
Das mein Programm nicht in die catch anweisung reingeht war ne freststellung un ich wundere mich grade warum.. xD?

Also das try brauch ich ja wegen dem BufferedReader. Sonst sagt mein Eclispe...: EY du braucht try catch!...Ich versthe halt net ich hab ja catch drinne....wozu ich dann unbedingt noch ein Finally brauch...

Static deshalb...weil mir das in einem anderen Thread von mir so gesagt wurde. Es hat geklappt un ich hab mir dann keine weiteren gedanken drüber gemacht...Wie lässt sich das anders regeln?

Mit String lesen = br.readLine(); vor der while Schleife liest Du die erste Zeile ein und verwirfst sie.
Ich lese doch damit mein ganzes Dukument aus und nicht nur die erste Zeile oder? Weil die erste Zeile ist für mich nicht relevant. Erst spätere Zeilen.

Das mit dem Stringbuilder hab ich rausgenommen, danke für den hinweis, den hatte ich mal im Anfangsstadium meines Programms benötigt.
 
T

TryToHelp

Gast
Jetzt wo du es erwähnst...mein Programm geht garnicht in die catch anweisung rein oO

So soll das im Normalfall auch seien, nur wenn etwas unerwartetes, falsches passiert, also ein Fehler auftritt, soll es da rein, so z.b. wenn die Datei nicht gefunden wird ;-)

ansonsten schließe ich mich den Meinungen meiner vorredner an.

Variablen sollten sinvolle namen haben, als was beinhgalten sie z.B. bei Perosn nenne ich sie name, vorname, adresse,... und nicht string1, string2, string3,...

Die main Methode sollte normalerweise nicht die komplette logik enthalten, sondern es in eigene Methoden schreiben und diese dann aufrufen
 

Michael...

Top Contributor
Das mein Programm nicht in die catch anweisung reingeht war ne freststellung un ich wundere mich grade warum.. xD?
Wenn alles passt und kein Fehler auftritt, warum sollte dann in die catch Anweisung gesprungen werden? Die ist ja nur da für den Fehlerfall.
Also das try brauch ich ja wegen dem BufferedReader.
Dafür hast Du ja das try in Zeile 22
Ich lese doch damit mein ganzes Dukument aus und nicht nur die erste Zeile oder? Weil die erste Zeile ist für mich nicht relevant. Erst spätere Zeilen.
Der Rest wird ja in der while Schleife gelesen. War mir nur nicht sicher, ob Dir bewusst war, dass Du die erste Zeile ignorierst bzw. riskierst das eine IOException geworfen wird.
 

MrZylinder

Aktives Mitglied
Ach mann:

Dafür hast Du ja das try in Zeile 22

Warum hab ich das 2 mal drinne oO...komisch nicht gesehen muss ich dann verbessern. =)

Mir ist klar das eine Catch anweisung nur dafür da is wenn etwas falsches passiert. hehe. hab mich da wohl falsch ausgedrückt. Ich hab einen falschen pfad meiner datei angegeben und da wurde nicht in die Catch einweisung gesprungen =)

Für den Rest bedanke ich mich schonmal ... versuche dies dann auch auszubessern ^^
 

MrZylinder

Aktives Mitglied
Jetzt funktioniert das auch ohne Finally und wenn ich einen falschen pfad angebe bekomm ich auch die entsprechende Meldung.
Das lag an meiner "Try-Try-Catch-Catch-Finally"-Kacke (sorry das ich mich so ausdrücke aber anders kann man das glaube ich nicht nennen).

Was mich noch interessieren würde. Kann ich mein InputDialog so einrichten das ich in dem einen nur Buchstaben und in dem andern nur zahlen Eingeben kann/darf?
 

Michael...

Top Contributor
Die Standarddialoge können das m.W. nicht. Aber man kann z.B. ein selbstdefiniertes JTextField, welches die Anforderungen erfüllt, per
Code:
JOptionPane.showMessageDialog(Component, Object, ....
in einen solchen übergeben, oder sich selbst einen Dialog mit
Code:
JDialog
basteln
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kydo Beschreibung meines programms Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S Methoden Beim Start meines Projektes eine Methode ausführen Java Basics - Anfänger-Themen 14
L Compiler-Fehler Komische Ausgabe meines Programms Java Basics - Anfänger-Themen 6
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
Streeber reale Laufzeit meines Programms ausgeben Java Basics - Anfänger-Themen 1
T Collections (De)-Serialisierung meines HashSets Java Basics - Anfänger-Themen 3
M Bitte um Kontrolle meines Quelltextes Java Basics - Anfänger-Themen 10
H Optische Aufmachung meines Programms Java Basics - Anfänger-Themen 76
B Absturz der VM bei Ausführung meines Programms Java Basics - Anfänger-Themen 3
G wie finde ich den pfad meines programms raus? Java Basics - Anfänger-Themen 2
P Verzeichnis meines Programms Java Basics - Anfänger-Themen 4
G Dringende Frage bzgl. meines Codes Java Basics - Anfänger-Themen 30
V Eclipse findet (meines Wissens) korrekte Klasse nicht Java Basics - Anfänger-Themen 3
C Darstellung von Datum - Codes richtig? Java Basics - Anfänger-Themen 2
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
S Den Minimumberechnen 2 codes vergleichen Java Basics - Anfänger-Themen 4
S Allgemeine Java Codes lesen und verstehen Java Basics - Anfänger-Themen 7
M Benutzereingabe eines Codes verbessern Java Basics - Anfänger-Themen 3
A Variablen Definitionen zu Codes und Funktionen. Java Basics - Anfänger-Themen 3
C Codes einrücken Java Basics - Anfänger-Themen 5
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
L Codes Java Basics - Anfänger-Themen 6
Y "Optimierung" des Codes Java Basics - Anfänger-Themen 14
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
Y Erste Schritte Verknüpfung zweier JAVA-Codes Java Basics - Anfänger-Themen 8
Kenan89 Wo sind die Java Standard Library Source Codes zu finden? Java Basics - Anfänger-Themen 5
C ASCII CODES in Linux anders als auf Windows? Java Basics - Anfänger-Themen 4
C ASCII Codes in Buchstaben umwandeln Java Basics - Anfänger-Themen 2
M Java codes bedeutung Java Basics - Anfänger-Themen 9
A Beschreibung des Codes Java Basics - Anfänger-Themen 2
N Eclipse und ascii codes, welchen wählen? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben