2016-08-07 41 views
0

Ich habe eine Zeichenfolge, die die Daten aus einem Jtextfield erhält, und dann unterteile ich diese Daten in 3 Buchstaben in drei Zeichenfolgen (String erste, zweite, dritte)Ausnahme funktioniert nicht (zeigt die Nachricht JOptionPane nicht an)

try { 
String text,first,second,third,result; 
Swing get = new Swing(); 
text = get.getMyText(); 
first = text.substring(0,1); 
second = text.substring(1,2); 
third = text.substring(2,3); 
result = first + third + second; 
if(text.isEmpty) { 
throw new Exception(); 
    } 
} catch (Exception e) { 
JOptionPane.showMessageDialog(null,"Empty","....",JOptionPane.ERROR_MESSAGE); 
    } 

ich diese seltsame Nachricht aus dem System anstelle der JOptionPane Nachricht:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 

jede Ahnung von dem, was ich hier vermissen?

zu Ihrer Information, ich habe die unten als auch versucht, aber auch immer noch die gleichen Fehler

if(first.isEmpty() || second.isEmpty() || third.isEmpty()) { 
     // my message 
    } 

meine Swing-Klasse wie folgt lautet:

public class Swing { 

    // second line of the frame 

    private static JFrame window; // creating the frame 
    private static JTextField text; 
    // setting the frame 
    /** 
    * @wbp.parser.entryPoint 
    */ 
    public void Run() { 

     window = new JFrame("Tool"); 
     window.setResizable(false); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.getContentPane().setBackground(new Color(230, 230, 250)); 
     window.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
     window.getContentPane().isOpaque(); 

     window.getContentPane().setLayout(null); 

     // the textfield 
     text = new JTextField(); 
     text.setHorizontalAlignment(SwingConstants.CENTER); 
     text.setForeground(Color.BLUE); 
     text.setFont(new Font("David", Font.PLAIN, 20)); 
     text.setColumns(10); 
     text.setBounds(504, 11, 149, 20); 
     window.getContentPane().add(text); 

     // adding the button from the other class (MyBtn) 
     MyBtn addBTN = new MyBtn(); 
     window.getContentPane().add(addBTN.run()); 

     // setting the frame 
     window.setVisible(true); 
     window.setSize(750, 500); 
     window.setLocationRelativeTo(null); 
    } 

    // preparing the getters for the input 
    public String getText() { 
     return text.getText(); 
    } 
+1

Hinweis: Sie wollen, dass wir unsere Zeit verbringen, Ihnen zu helfen; Also: Bitte nehmen Sie sich etwas Zeit, um das so einfach wie möglich zu machen. Das beginnt mit korrekt formatierten Codebeispielen. Und, Randnotiz: Ihre Variablennamen sind nicht hilfreich. Sie sagen nicht viel, worum es in dem Objekt wirklich geht. erster, zweiter, dritter ... was? Und worum geht es in der Klasse "Swing"? Dieser Name verwirrt nur Leser! Und Hinweis Nr. 2: Solche Probleme können sehr oft durch einfaches Hinzufügen von Trace-Anweisungen gelöst werden. Wenn Sie Ihre Textzeichenfolge direkt nach dem Abrufen gedruckt hätten, hätten Sie sich die Zeit für das Verfassen Ihrer Frage sparen können. – GhostCat

+0

Java-GUIs müssen mit verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. arbeiten, wobei verschiedene PLAFs in verschiedenen Ländern verwendet werden. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). –

Antwort

1

Sie müssen testen, ob Text ist leer vor versuchen, subStrings daraus zu extrahieren, wie meine Wette ist, dass Sie wahrscheinlich versuchen, eine SubString von einem leeren String zu erhalten, und aus diesem Grund sehen Sie die Laufzeit Ausnahme.

Meine Wette ist, dass Ihre Swing-Klasse eine GUI ist, möglicherweise ein JFrame, dass Sie ein nicht angezeigtes Swing-Objekt erstellen und versuchen, Text daraus zu extrahieren, und da es nicht angezeigt wird, hat der Benutzer nicht t hat irgendwelche Daten in die Textfelder eingegeben. Vielleicht möchten Sie stattdessen den Text von einem vollständig separaten und eindeutig angezeigten Swing-Objekt extrahieren. Aber auch das ist nur eine Vermutung. Wenn ich recht habe, dann solltest du hier einen Verweis auf die visualisierte GUI-Komponente dorthin geben, wo sie gebraucht wird, und nicht unnötig eine neue erstellen.

Auch welche Klasse ist catch (exception e) {? Meinst du eine großgeschriebene Ausnahme?


Etwas wie:

// get should be set with a valid reference to the displayed 
// Swing object. Don't create a **new** Swing object 
// Swing get = new Swing(); // no! 

String text = get.getMyText().trim(); 

if (text.isEmpty() || text.length() < 4) { 
    // show error message in JOptionPane 
} else { 
    String text,first,second,third,result; 
    first = text.substring(0,1); 
    second = text.substring(1,2); 
    third = text.substring(2,3); 
    result = first + third + second; 
} 
+0

Vielen Dank für Ihre Antwort, Swing ist ein Name der Klasse, wo ich mein Fenster und die Komponente erstellt habe, und über den Fang, ja, ich meinte es als Ausnahme, nur ich schrieb es falsch in meiner Frage, sorry. Könnten Sie bitte Ihre Lösung erklären, indem Sie schreiben, wie mein Code sein sollte? Nochmals vielen Dank –

+2

@AboelmagdSaad: Ich kann Ihren Code nicht vollständig korrigieren (und wir schreiben im Allgemeinen nicht Code für Sie), aber wieder sollten Sie überprüfen, ob der Text ** ** ** ** leer ist. Aber für umfangreichere Hilfe müssen Sie mehr zeigen und erzählen, speziell über Swing. Ist es eine Klasse, die JFrame erweitert? Ist es bereits sichtbar, wenn der obige Code aufgerufen wird? Wo wird dieser Code in Bezug auf die Swing-Klasse aufgerufen? Bitte klären Sie für uns. Berücksichtigen Sie auch das Erstellen und Veröffentlichen eines gültigen [mcve]. –

+0

@AboelmagdSaad: siehe Bearbeiten.Aber wiederum, du gibst Swing wahrscheinlich nicht richtig. Eine Sache, die Sie nicht tun sollten, um dies zu lösen, ist die Verwendung von statischen Methoden und Feldern (nur für den Fall, dass dies auf Sie zukam). –