Это домашнее задание, которое у меня есть. У меня он работал, пока я не добавил к нему FX. Теперь появится всплывающее окно с панелью заголовка и метками, но фактическая функция кода не отображается в окне. Код перестает работать в EventHandler, и я не понимаю, почему и как это исправить. Это анализатор текста, который подсчитывает количество вхождений слова и отображает слово с подсчетом. Если кто-то может указать, где и почему код неверен и как это исправить, я был бы признателен.
package application;
/**
* <h1>Word Occurrences</h1>
* The program counts the number of a times words
* appears in the text.
*
*
* @author
* @version 3.0
* @since 4/1/2020
*/
import java.net.MalformedURLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.Label;
import javafx.scene.control.Labeled;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.TilePane;
import javafx.scene.text.Text;
import javafx.scene.text.*;
public class TextAnalyzer extends Application {
/**
* Override method to produce the output *
* @param s first parameter in the start method
* @return Output
*/
//public TextAnalyzer() { }
@Override
public void start(Stage s) {
// title for the stage
s.setTitle("Text Analyzer");
// create a tile pane
TilePane title = new TilePane();
// create a label
Label l = new Label("Word : Count");
// Read in the file
URLReader obj = new URLReader();
// run
EventHandler event = new EventHandler<ActionEvent>() {
private Labeled TextLine;
public void handle(ActionEvent e) {
// variables
String inputString = null;
// Read in the file
URLReader obj = new URLReader();
// string from URLReader
try {
inputString = obj.reader();
} catch (MalformedURLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
// word array
String[] wordsArray = inputString.split("\\s+");
// mapping the array
Map<String, Integer> map = new HashMap<>();
String[] var10 = wordsArray;
int var9 = wordsArray.length;
// count words
//for (String word : wordsArray) {
for(int var8 = 0; var8 < var9; ++var8) {
String word = var10[var8];
if (map.containsKey(word)) {
int count = map.get(word);
map.put(word, count + 1);
} else {
map.put(word, 1);
}
}
// output
Iterator var13 = map.entrySet().iterator();
while(var13.hasNext()) {
Entry<String, Integer> entry = (Entry)var13.next();
this.TextLine.setText((String)entry.getKey() + " : " + entry.getValue());
}
/*for (Map.Entry<String, Integer> entry : map.entrySet()) {
TextLine.setText(entry.getKey() + " : " + entry.getValue());
}*/
}
};
title.getChildren().add(l);
Scene scene = new Scene(title, 400, 400);
s.setScene(scene);
s.show();
}
/**
* This is the main method which produces the window and contents
* from the start method
* @param args
*/
public static void main(String[] args) throws Exception {
launch(args);
//CreateTable();
}
}
--------------------------------
package application;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
/**
* This is the URL reader to read the URL into a string
* for processing.
*
* @return FileString
* @exception IOException on input error
* @see IOException
*
*/
public class URLReader {
String fileString;
//public URLReader() { }
public String reader() throws MalformedURLException {
// create the URL
URL file = new URL("http://shakespeare.mit.edu/macbeth/full.html");
// Open the URL stream and create readers convert to string
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(file.openStream()));
// write the output
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = reader.readLine()) != null)
response.append(inputLine);
// close reader
reader.close();
fileString = response.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("error");
}
return fileString.toString();
}
}
1 ответ
Как указано выше, установите действие startButton
, которое вам нужно создать, и после этого установите действие следующим образом:
startButton.setOnAction((event) -> {
System.out.println(„Start Button pressed!“);
// variables
String inputString = null;
// Read in the file
URLReader obj = new URLReader();
// string from URLReader
try {
inputString = obj.reader();
} catch (MalformedURLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
// word array
String[] wordsArray = inputString.split("\\s+");
// mapping the array
Map<String, Integer> map = new HashMap<>();
String[] var10 = wordsArray;
int var9 = wordsArray.length;
// count words
//for (String word : wordsArray) {
for(int var8 = 0; var8 < var9; ++var8) {
String word = var10[var8];
if (map.containsKey(word)) {
int count = map.get(word);
map.put(word, count + 1);
} else {
map.put(word, 1);
}
}
// output
Iterator var13 = map.entrySet().iterator();
while(var13.hasNext()) {
Entry<String, Integer> entry = (Entry)var13.next();
System.out.println((String)entry.getKey() + " : " +
entry.getValue());
}
/*for (Map.Entry<String, Integer> entry : map.entrySet()) {
TextLine.setText(entry.getKey() + " : " + entry.getValue());}*/
});
Кроме того, создайте/определите свою Label
частную маркированную текстовую строку; за пределами setOnAction
, как вы сделали с Label l
.
Затем, если вы хотите обновить текст метки TextLine
, обновите его внутри setOnAction
Вот хорошая статья об обработке событий Java FX ссылка
Кроме того, я бы рекомендовал запускать ваши вещи внутри setOnAction
в другом потоке, чтобы не блокировать ваш пользовательский интерфейс. Но это только тонкая настройка.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.