Из приложения с выводом в консоль сделать приложение с графическим интерфейсом

Есть Игра в слова :ты вписываешь в первое поле слово, программа считывает последнюю букву и во второе поле выводит слово найденное слово из текстового документа(там +-60000 слов) на эту букву Через консоль все работает, но как сделать чтоб работало в с интерфейсом графическим

package org.example;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class WordGame {

    public static void main(String[] args) throws IOException {
        WordGame game = new WordGame();
        System.out.println(game.run());
    }

    long score = 0;
    Scanner scanner = null;
    Scanner in = null;
    File file = new File("russian_nouns.txt");
    private final Set<String> repeatedWords = new HashSet<>();

    public String run() throws FileNotFoundException {
        String myWord;
        String fileWord;

        myWord = inputFirstWord();//первое слово вводит пользователь
        while (true) {
            if (isInputedWordCorrect(myWord) && !isWordInListOfRepeat(myWord)) {// проверка введенного слова на корректность и повтор
                score++;//после каждого введенного слова прошедшего условия добавляется +1 в счет
                addToListOfRepeat(myWord); //добавляет введенное слово в список повторов
                fileWord = getWordFromFileOnChar(getLastChar(myWord));//ищет слово на заданную букву в файле
                if (fileWord.isEmpty()) {//если слова в списке на данную букву закончились функция вернет ""
                    return ("you win. your score is " + score);//слова в списке на данную букву закончлись
                } else {
                    System.out.println("Word from file: " + fileWord);
                    addToListOfRepeat(fileWord);//добавляет слово из файла в список повторов
                    myWord = inputWord(getLastChar(fileWord));//пользователь вводит слово
                    if (!IsWordStartWith(myWord, getLastChar(fileWord))) {
                        return ("you lose. your score is " + score);//первая буква не подходит
                    }
                }
            } else {
                return ("you lose. your score is " + score);//слово либо уже было, либо его нет в списке
            }
        }
    }

    boolean IsWordStartWith(String word, char firstChar) {//проверяет начинается ли слово с заданной буквы
        return word.charAt(0) == firstChar;
    }

    String getWordFromFileOnChar(char firstChar) throws FileNotFoundException {//ищет в списке слово, начинающееся с заданной букввы(также отсеивает повторы)
        scanner = new Scanner(file);
        String word = "";
        while (scanner.hasNextLine()) {
            word = scanner.nextLine();

            if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//слово которое начинает с новой буквы и не повторяется
                // System.out.println(word);
                break;
            }
        }
        if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//если цикл выше не находит подходящего слова, он остановится на последнем в списке, поэтому еще одна проверка
            scanner.close();
            return word;
        } else {
            scanner.close();
            return "";
        }
    }

    boolean isWordInListOfRepeat(String word) {//есть ли слово в списке тех, которые уже были
        return repeatedWords.contains(word);
    }

    void addToListOfRepeat(String word) {
        repeatedWords.add(word);
    }

    char getLastChar(String word) {
        return word.charAt(word.length() - 1);
    }

    String inputFirstWord() {
        System.out.println("Input first word: ");
        in = new Scanner(System.in, StandardCharsets.UTF_8);
        return in.nextLine();
    }

    String inputWord(char firstChar) {
        System.out.println("Input your word on char " + firstChar + ": ");
        in = new Scanner(System.in, StandardCharsets.UTF_8);
        return in.nextLine();
    }


    boolean isInputedWordCorrect(String inputedWord) throws FileNotFoundException {//проверяет есть ли слово в списке(существует ли такое слово)

        scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            String nextWord = scanner.nextLine();

            if (nextWord.equals(inputedWord)) {
                scanner.close();
                return true;
            }
        }
        scanner.close();
        System.out.println("the entered word is incorrect.");
        return false;
    }


}

Я пытался что-то сделать, но после нажатия на кнопку приложение крашится

import javax.swing.*;
import java.awt. event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main extends JFrame implements ActionListener {
    JFrame frame = new JFrame("Слова");
    JTree tree = new JTree();
    JLabel slowa = new JLabel("Слова");
    JButton button = new JButton("Обрабоать");
    JTextField textField = new JTextField();
    JTextField textField2 = new JTextField();

    Main() {
        frame.setLayout(null);
        frame.setVisible(true);
        frame.setBounds(300, 300, 700, 400);
        textField.setBounds(200, 100, 300, 40);
        frame.add(textField);
        slowa.setBounds(320, 50, 300, 40);
        frame.add(slowa);
        button.setBounds(300, 250, 100, 50);
        frame.add(button);
        textField2.setBounds(200, 160, 300, 40);
        frame.add(textField2);
        button.addActionListener(this);

    }


    public static void main(String[] args) throws FileNotFoundException {
        new Main();
    }
    long score = 0;
    Scanner scanner = null;
    Scanner in = null;
    File file = new File("russian_nouns.txt");
    private final Set<String> repeatedWords = new HashSet<>();

    public String run(String myWord) throws FileNotFoundException {

        String fileWord;

        myWord = inputFirstWord();//первое слово вводит пользователь
        while (true) {
            if (isInputedWordCorrect(myWord) && !isWordInListOfRepeat(myWord)) {// проверка введенного слова на корректность и повтор
                score++;//после каждого введенного слова прошедшего условия добавляется +1 в счет
                addToListOfRepeat(myWord); //добавляет введенное слово в список повторов
                fileWord = getWordFromFileOnChar(getLastChar(myWord));//ищет слово на заданную букву в файле
                if (fileWord.isEmpty()) {//если слова в списке на данную букву закончились функция вернет ""
                    return ("you win. your score is " + score);//слова в списке на данную букву закончлись
                } else {
                    System.out.println("Word from file: " + fileWord);
                    addToListOfRepeat(fileWord);//добавляет слово из файла в список повторов
                    myWord = inputWord(getLastChar(fileWord));//пользователь вводит слово
                    if (!IsWordStartWith(myWord, getLastChar(fileWord))) {
                        return ("you lose. your score is " + score);//первая буква не подходит
                    }
                }
            } else {
                return ("you lose. your score is " + score);//слово либо уже было, либо его нет в списке
            }
        }
    }

    boolean IsWordStartWith(String word, char firstChar) {//проверяет начинается ли слово с заданной буквы
        return word.charAt(0) == firstChar;
    }

    String getWordFromFileOnChar(char firstChar) throws FileNotFoundException {//ищет в списке слово, начинающееся с заданной букввы(также отсеивает повторы)
        scanner = new Scanner(file);
        String word = "";
        while (scanner.hasNextLine()) {
            word = scanner.nextLine();

            if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//слово которое начинает с новой буквы и не повторяется
                // System.out.println(word);
                break;
            }
        }
        if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//если цикл выше не находит подходящего слова, он остановится на последнем в списке, поэтому еще одна проверка
            scanner.close();
            return word;
        } else {
            scanner.close();
            return "";
        }
    }

    boolean isWordInListOfRepeat(String word) {//есть ли слово в списке тех, которые уже были
        return repeatedWords.contains(word);
    }

    void addToListOfRepeat(String word) {
        repeatedWords.add(word);
    }

    char getLastChar(String word) {
        return word.charAt(word.length() - 1);
    }

    String inputFirstWord() {
        textField.setText("Input first word: ");
        in = new Scanner(System.in, StandardCharsets.UTF_8);
        return in.nextLine();
    }

    String inputWord(char firstChar) {
        textField.setText("Input your word on char " + firstChar + ": ");
        in = new Scanner(System.in, StandardCharsets.UTF_8);
        return in.nextLine();
    }


    boolean isInputedWordCorrect(String inputedWord) throws FileNotFoundException {//проверяет есть ли слово в списке(существует ли такое слово)

        scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            String nextWord = scanner.nextLine();

            if (nextWord.equals(inputedWord)) {
                scanner.close();
                return true;
            }
        }
        scanner.close();
        System.out.println("the entered word is incorrect.");
        return false;


    }


    @Override
    public void actionPerformed(ActionEvent e) {
        String myWord = textField.getText();
        try {
            textField2.setText(run(myWord));
        } catch (FileNotFoundException ex) {
            throw new RuntimeException(ex);
        }
    }

}

Ответы (0 шт):