2016-08-07 22 views
0

jtextfieldからデータを取得する文字列があります。このデータを3つの文字列(1番目、2番目、3番目の文字列)で3文字に分割します例外が機能していません(JOptionPaneメッセージは表示されません)

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); 
    } 

は私の代わりにJOptionPaneのメッセージのシステムからこの奇妙なメッセージが表示されます。

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

私がここで欠場何の任意の手掛かり?あなたがテキストかどうかをテストする必要が

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

ヒント:あなたは私たちがあなたを助けるために私たちの時間を過ごしたいです。だからできるだけ簡単にするために時間を割いてください。これは、適切にフォーマットされたコード例から始まります。そして、副作用:あなたの変数名は役に立たない。彼らは、オブジェクトが本当に何であるかをあまり伝えません。最初、二番目、三番目...何?そして、「スイング」クラスについてはどうですか?その名前は読者だけを混乱させる!そして、2番のヒント:このような問題は、単にトレースステートメントを追加するだけで解決できることがよくあります。あなたがそれを取り込んだ直後にあなたのテキスト文字列を印刷していたら...あなたはあなたの質問を書く時間を節約したでしょう。 – GhostCat

+0

Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –

答えて

1

:あなたの情報について

は、私は私のSwingのクラスは以下の通りである

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

まだだけでなく、以下のようにも同じエラーを試してみました空の場合の前にサブ文字列を抽出しようとしていますが、空のStringからサブ文字列を取得しようとしている可能性が高いため、ランタイム例外が発生しています。

あなたのSwingクラスは、表示されていないSwingオブジェクトを作成しようとしているGUI(おそらくはJFrame)であり、表示されていないため、テキストフィールドにデータを入力しませんでした。おそらく代わりに、完全に別個に表示されたSwingオブジェクトからテキストを抽出したいと思うかもしれません。しかし再び、これは単なる推測です。私が正しいのであれば、視覚化されたGUIコンポーネントへの参照をここで渡して、必要なところで新しいものを作成しないことを望みます。

また、どのクラスがcatch (exception e) {ですか?例外を大文字にすることを意味しましたか?


のような何か:

// 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

あなたの答えをありがとう、スイングは、私がウィンドウとコンポーネントを作成したクラスの名前であり、キャッチについては、はい、私は例外としてそれを意味した、ちょうど私の質問で間違って書いた、申し訳ありません。 私のコードの記述方法を記述して、あなたのソリューションを説明してください。 ありがとうございました –

+2

@AboelmagdSaad:あなたのコードを完全に修正することはできませんが、通常はコードを書きませんが、もう一度、テキストが空であるかどうかを確認する必要があります。しかし、より広範なヘルプを表示するには、スイングについて詳しく説明してください。それはJFrameを拡張するクラスですか?上記のコードが呼び出されたときに既に表示されていますか?このコードはSwingクラスとの関係でどこに呼び出されますか?私たちのために明確にしてください。また、有効な[mcve]を作成して投稿することを検討してください。 –

+0

@AboelmagdSaad:編集を参照してください。しかし、もう一度、スウィングをすべての可能性で正しく渡すわけではありません。これを解決するために行うべきではないことの1つは、静的メソッドとフィールドを使用することです(ちょうどこの場合に起こります)。 –

関連する問題