3

アクションを実行するためにクリックするJButtonを使用してSwingでコード化されたフォームがあります。しかし、クリックするとフレームがハングします。タスクバーを使用して終了するまで終了できません。何が問題ですか?これが私のコードです:

jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton1ActionPerformed(evt);
    }
});

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String[] stopwords = {"a", "sometime", "sometimes", "somewhere", "still",
            "such", "system", "take", "ten", "than", "that", "the", "their", 
            "them", "themselves", "then", "thence", "there", "thereafter",
            "thereby", "therefore", "therein", "thereupon", "these", "they",
            "thickv", "thin", "third", "this", "those", "though", "three",
            "through", "throughout", "thru", "thus", "to", "together", "too",
            "top", "toward", "towards", "twelve", "twenty", "two", "un",
            "under", "until", "up", "upon", "us", "very", "via", "was", "we",
            "well", "were", "what", "whatever", "when", "whence", "whenever",
            "where", "whereafter", "whereas","whereby", "wherein", "whereupon",
            "wherever", "whether", "which", "while","whither", "who", "whoever",
            "whole", "whom", "whose", "why", "will", "with", "within", "without",
            "would", "yet", "you", "your", "yours", "yourself", "yourselves",
            "contact", "grounds", "buyers",  "tried", "said,", "plan", "value",
            "principle.", "forces", "sent:", "is,", "was", "like", "discussion",
            "tmus", "diffrent.", "layout", "area.", "thanks", "thankyou",
            "hello", "bye", "rise","fell","fall","psqft.","http://","km","miles"};
    try {
        Scanner fip1 = new Scanner(new File(selectedFile));
        FileOutputStream out=new FileOutputStream("d:/StopWords.txt");
        while(fip1.hasNext()) {
            int flag=1;
            String s1=fip1.next();
            s1=s1.toLowerCase();
            for(int i=0;i<stopwords.length;i++){
                if(s1.equals(stopwords[i])) {
                    flag=0;
                }
            }
            if(flag!=1) {
             // System.out.println(s1);
             // jTextArea1.append("\n"+s1);
             PrintStream p=new PrintStream(out);
             p.println(s1);  
             p.close();
         }
     }
         JOptionPane.showMessageDialog(null,"STOP WORD REMOVAL IS DONE");        
     } catch(Exception e){
         System.err.println("cannot read file");
     }
}                                        
4

2 に答える 2

1

これはループのように聞こえますが、Javaには非常に優れたデバッグサービスがあり、多くの場合IDEに組み込まれています。何が起こっているのかを追跡できるかどうかを確認するためにそれらを試してみてください。ボタンを処理する場所で停止し、ここのコードに従ってください。

ストップワードのリストにハッシュマップを使用することもできますが、それはバグではなく、単なる改善です。

編集:@robinが指摘したように、Swingアクションはすぐに終了する必要があります。

于 2013-03-07T14:50:31.010 に答える
1

スキャナーの使い方のせいだと思います。outputStreamを使用しないのはなぜですか?問題に関係なく、SwingWorkerを使用してダーティIO作業を行い、UIの応答性を維持する必要があります。

于 2013-03-07T14:56:43.450 に答える