Как решить эти исключения в Java Swing

Я пытаюсь сделать простой пользовательский интерфейс в java swing, который попросит пользователя ввести текст.
Вот моя программа:

package practice;

import java.awt.*;
import javax.swing.*;
public class gui_demo {

     JFrame frame;
     JLabel lblEnterText;
     static JTextField textField1;
     private JTextField textField2;
    // static String userText = textField.getText();
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    gui_demo window = new gui_demo();

                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public gui_demo() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblEnterText = new JLabel("ENTER TEXT");
        lblEnterText.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
        lblEnterText.setHorizontalAlignment(SwingConstants.CENTER);
        lblEnterText.setBounds(46, 70, 94, 25);
        frame.getContentPane().add(lblEnterText);

        textField1 = new JTextField();
        textField1.setBounds(214, 63, 181, 41);
        frame.getContentPane().add(textField1);
        textField1.setColumns(10);

        JButton btnNewButton = new JButton("Show Result");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                ParserTest pt = new ParserTest();
            try {
                    pt.parserAction();
                    textField2.setText(pt.result);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,"Oops!!Error occured!");// TODO Auto-generated catch block
                e.printStackTrace();
            }

            }
        });
        btnNewButton.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
        btnNewButton.setBounds(157, 135, 131, 51);
        frame.getContentPane().add(btnNewButton);

        JLabel lblFindNounsVerbs = new JLabel("Find nouns, verbs, adjectives from a given text");
        lblFindNounsVerbs.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC, 12));
        lblFindNounsVerbs.setBounds(10, 11, 371, 25);
        frame.getContentPane().add(lblFindNounsVerbs);

        textField2 = new JTextField();
        textField2.setBounds(30, 197, 387, 61);
        frame.getContentPane().add(textField2);
        textField2.setColumns(10);

    }
}

У меня есть другой класс с именем parserTest, который находит существительные / глаголы / прилагательные в предложении. Вот класс parserTest:

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;

import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;

public class ParserTest {

 static Set<String> nounPhrases = new HashSet<>();
 static Set<String> adjectivePhrases = new HashSet<>();
 static Set<String> verbPhrases = new HashSet<>();
 String result = new String;
 gui_demo gd = new gui_demo();
 String line = practice.gui_demo.textField1.getText();
 public ParserTest(String line) {
  // TODO Auto-generated constructor stub
 }

 public ParserTest() {
  // TODO Auto-generated constructor stub
 }

 public void getNounPhrases(Parse p) {
     if (p.getType().equals("NN") || p.getType().equals("NNS") || p.getType().equals("NNP") || p.getType().equals("NNPS")) {
          nounPhrases.add(p.getCoveredText());        
     }
     
     if (p.getType().equals("JJ") || p.getType().equals("JJR") || p.getType().equals("JJS")) {
      adjectivePhrases.add(p.getCoveredText());
     }
     
     if (p.getType().equals("VB") || p.getType().equals("VBP") || p.getType().equals("VBG")|| p.getType().equals("VBD") || p.getType().equals("VBN")) {
      verbPhrases.add(p.getCoveredText());
        }
     
     for (Parse child : p.getChildren()) {
          getNounPhrases(child);
     }
 }  
 
 public void parserAction() throws Exception {
  InputStream is = new FileInputStream("en-parser-chunking.bin");
     ParserModel model = new ParserModel(is);
     Parser parser = ParserFactory.create(model);
     Parse topParses[] = ParserTool.parseLine(line, parser, 1);
     for (Parse p : topParses){
      
      getNounPhrases(p);
     }
 }
 public static void main(String[] args) throws Exception {
  
  new ParserTest().parserAction();
        result = "Nouns :"+ nounPhrases + "\n" + "Verbs:" + verbPhrases +"Adjectives:" + adjectivePhrases;  
  }  
}

Оба класса работают хорошо по отдельности, но я не могу связать их вместе.
Когда я запускаю эту программу, она дает следующие исключения..

исключения

java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -1 в java.lang.AbstractStringBuilder.substring(неизвестный источник) в java.lang.StringBuilder.substring(неизвестный источник) в opennlp.tools.cmdline.parser.Parsero. (ParserTool.java:66) at Practice.ParserTest.parserAction(ParserTest.java:59) at Practice.gui_demo$2.actionPerformed(gui_demo.java:82) в javax.swing.AbstractButton.fireActionPerformed(Неизвестный источник) в javax..AbstractButton$Handler.actionPerformed(Неизвестный источник) в javax.swing.DefaultButtonModel.fireActionPerformed(Неизвестный источник) в javax.swing.DefaultButtonModel.setPressed(Неизвестный источник) в javax.swing.plaf.basic.BasicBouseless) (Unknown Source) Unknown. в java.awt.Component.processMouseEvent(неизвестный источник) в javax.swing.JComponent.processMouseEvent(неизвестный источник) в java.awt.Component.processEvent(неизвестный источник) в java.awt.Container.processEvent(неизвестный источник) в java..awt.Component.dispatchEventImpl(Неизвестный источник) на java.awt.Container.dispatchEventImpl(неизвестный источник) в java.awt.Component.dispatchEvent(неизвестный источник) в java.awt.LightweightDispatcher.retargetMouseEvent(неизвестный источник) в java.awt.LightweightDispatcher.processMouseEvent(неизвестный источник).LightweightDispatcher.dispatchEvent(Неизвестный источник) в java.awt.Container.dispatchEventImpl (Неизвестный источник) в java.awt.Window.dispatchEventImpl(Неизвестный источник) в java.awt.Component.dispatchEvent(Неизвестный источник) в java.awue.dispatchEventImpl(неизвестный источник) на java.awt.EventQueue.access$500(неизвестный источник) на java.awt.EventQueue$3.run(неизвестный источник) на java.awt.EventQueue$3.run(неизвестный источник) на java.security.AccessController..doPrivileged(собственный метод) в java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(неизвестный источник) в java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(неизвестный источник) в java.awuet.awt.EventQueue$4.run(Неизвестный источник e) в java.security.AccessController.doPrivileged(собственный метод) в java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(неизвестный источник) в java.awt.EventQueue.dispatchEvent(неизвестный источник) в java.awpOnt Источник) в java.awt.EventDispatchThread.pumpEventsForFilter(Неизвестный источник) в java.awt.EventDispatchThread.pumpEventsForHierarchy(Неизвестный источник) в java.awt.EventDispatchThread.pumpEvents(Неизвестный источник) в java.awpEnt at java.awt.EventDispatchThread.run (неизвестный источник)

пожалуйста, помогите мне решить проблему.

1 ответ

Две строки из исключения, на которое вы хотите посмотреть:

practice.ParserTest.parserAction(ParserTest.java:59) at
practice.gui_demo$2.actionPerformed(gui_demo.java:82) at

Вам нужно либо проверить длину строки / индекс перед строкой 82 в слушателе действий, либо проверить наличие плохого индекса в ParserTest.parseAction перед строкой 59

Другие вопросы по тегам