FXML Controller class
public class WordComparePageController implements Initializable {
@FXML
private TextField wordOneText;
@FXML
private TextField wordTwoText;
@FXML
private Button pairSearchButton;
@FXML
private TextField wordPairText;
WordNetMeasures wordNetMeasures = new WordNetMeasures();
private double distance;
private double linDistance;
private double leskDistance;
DecimalFormat df = new DecimalFormat("#.0000");
DecimalFormat pf = new DecimalFormat("#.0");
@FXML
private ProgressBar progressBar;
@FXML
private ProgressIndicator progressIndicator;
@Override
public void initialize(URL url, ResourceBundle rb) {}
@FXML
private void onSearchButtonClicked(ActionEvent event) throws InstantiationException, IllegalAccessException {
progressBar.progressProperty().bind(taskPS.progressProperty());
progressIndicator.progressProperty().bind(taskPS.progressProperty());
Thread th = new Thread(taskPS);
th.setDaemon(true);
th.start();
}
Task<Void> taskPS = new Task<Void>() {
@Override
protected Void call() throws InstantiationException, IllegalAccessException {
updateProgress(0, 1);
distance = wordNetMeasures.searchForWord(wordOneText.getText(), wordTwoText.getText());
linDistance = wordNetMeasures.linMethod(wordOneText.getText(), wordTwoText.getText());
leskDistance = wordNetMeasures.leskMethod(wordOneText.getText(), wordTwoText.getText());
updateProgress(1, 40);
ProjectProperties.getInstance().setPathResult(distance);
System.out.println("Distance: = " + ProjectProperties.getInstance().getPathResult());
ProjectProperties.getInstance().setWordText(wordOneText.getText() + "," + wordTwoText.getText());
String wordNetDistance = String.valueOf(df.format(distance));
ProjectProperties.getInstance().setPathWordNetText(wordNetDistance);
ProjectProperties.getInstance().setLinWordNetText((String.valueOf(df.format(linDistance))));
ProjectProperties.getInstance().setLinResult(linDistance);
ProjectProperties.getInstance().setPathResult(distance);
ProjectProperties.getInstance().setLeskResult(leskDistance);
ProjectProperties.getInstance().setLeskWordNetText((String.valueOf(df.forma t(leskDistance))));
updateProgress(40, 70);
Database databaseConnection = new Database();
try {
databaseConnection.getConnection();
databaseConnection.addWordNetToDatabase(ProjectProperties.getInstance().getWordText(), distance, linDistance, leskDistance);
updateProgress(100, 100);
} catch (SQLException ex) {
Logger.getLogger(WordComparePageController.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
};
public class WordNetMeasures {
private static ILexicalDatabase db = new NictWordNet();
private static RelatednessCalculator[] rcs = {
new HirstStOnge(db), new LeacockChodorow(db), new Lesk(db), new WuPalmer(db),
new Resnik(db), new JiangConrath(db), new Lin(db), new Path(db)
};
private static RelatednessCalculator pathMethod = new Path(db);
private static RelatednessCalculator linMethod = new Lin(db);
private static RelatednessCalculator leskMethod = new Resnik(db);
private static double distance;
private static double linDistance;
private static double leskDistance;
public static double searchForWord(String word1, String word2) {
WS4JConfiguration.getInstance().setMFS(true);
RelatednessCalculator rc = pathMethod;
distance = rc.calcRelatednessOfWords(word1, word2);
return distance;
}
public static double linMethod(String word1, String word2) {
WS4JConfiguration.getInstance().setMFS(true);
RelatednessCalculator rc = linMethod;
linDistance = rc.calcRelatednessOfWords(word1, word2);
return linDistance;
}
public static double leskMethod(String word1, String word2) {
WS4JConfiguration.getInstance().setMFS(true);
RelatednessCalculator rc = leskMethod;
leskDistance = rc.calcRelatednessOfWords(word1, word2);
return leskDistance;
}
/**
* Gets the ontology path for the word passed in
* @param word
* @return
* @throws JWNLException
*/
public String[] getWordNetPath(String word) throws JWNLException {
String[] wordResults = new String[500];
RiWordnet wordnet = new RiWordnet();
String[] posOfWord = wordnet.getPos(word);
int[] wordIds = wordnet.getSenseIds(word, posOfWord[0]);
wordResults = wordnet.getHypernymTree(wordIds[0]);
return wordResults;
}
/**
* Gets the set of synsets for the word passed in
* @param word
* @return
*/
public String[] getWordNetSynset(String word) {
RiWordnet wordnet = new RiWordnet();
String[] posOfWord = wordnet.getPos(word);
int[] wordIds = wordnet.getSenseIds(word, posOfWord[0]);
String[] wordResults = wordnet.getSynset(wordIds[0]);
return wordResults;
}
任务
只能使用一次。要重用它,您必须重新实例化它,或者创建一个扩展服务
的类。
服务
负责创建和管理任务
,其好处是不必重新附加ProgressProperty的绑定。
必须将progressbar
添加到场景
中才能显示
public class TestApp extends Application {
private Stage progressStage;
@Override
public void start(Stage primaryStage) throws IOException {
Button btn = new Button("start task");
TaskService service = new TaskService();
service.setOnScheduled(e -> progressStage.show());
service.setOnSucceeded(e -> progressStage.hide());
ProgressBar progressBar = new ProgressBar();
progressBar.progressProperty().bind(service.progressProperty());
progressStage = new Stage();
progressStage.setScene(new Scene(new StackPane(progressBar), 300, 300));
progressStage.setAlwaysOnTop(true);
btn.setOnAction(e -> service.restart());
primaryStage.setScene(new Scene(new StackPane(btn), 300, 300));
primaryStage.show();
}
private class TaskService extends Service<Void> {
@Override
protected Task<Void> createTask() {
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
for (int p = 0; p < 100; p++) {
Thread.sleep(40);
updateProgress(p, 100);
}
return null;
}
};
return task;
}
}
public static void main(String[] args) {
launch(args);
}
}
主要内容:创建ProgressBar进度条()可视化JavaFX应用程序中的操作进度。 上面的代码生成以下结果。 创建ProgressBar 以下代码显示如何通过传递值来创建。 还可以使用空构造函数创建没有参数的进度条。然后使用方法分配值。如果我们不能确定任务的完全完成时间,可以设置进度条在不确定模式,直到确定任务的长度。 以下代码显示如何创建一个完成的进度条()。 上面的代码生成以下结果。
我有一个包含“资源管理器”类的多线程Java应用程序。 此类提供了一个资源列表,这些资源可以作为初始化参数请求。然后检查每个文件的本地文件系统,并将确定为本地的文件添加到列表中。 当类收到资源请求时,会发生以下情况之一: > 如果资源被确定为本地资源(在列表中):请提供可以找到它的URI。 如果资源是远程的(不在列表中):安排一个工作进程来获取资源。工作进程将在任务完成时通知经理,并更新本地资源列
我一直在学习JavaFX的任务,并使用这些任务通过或任务的方法等与应用程序线程进行通信。但是,我的需要知道用户何时按下 GUI 上的按钮,因为这可能会更改任务的 方法需要返回的值。我该怎么做?我知道如何响应单线程应用程序上的按钮按下事件,但不确定如何以线程安全的方式处理它。 到目前为止,这是我所拥有的,这是实现按钮事件的明智方式吗?
在 Windows 中的任务栏按钮可以被用于显示一个进度条。 这可以让一个窗口提供进度信息给用户,而不必切自行切换到这个窗口。 在 macOS,进度条将显示为 dock 图标的一部分。 Unity DE 也具有同样的特性,在运行器上显示进度条。 任务栏按钮中的进度栏: 三个系统中都是用相同的API - setProgressBar() 方法是 BrowserWindows 的方法。 是用 0 到
我试图为在GUI运行之前下载信息的应用程序编写一个进度条。因为下载和组织信息的过程非常漫长,所以我想通知用户进展情况。我决定在游戏后期使用进度条,因此,大部分代码都是编写的,我正在尝试将进度条合并到代码中,而无需对代码进行剧烈的重新操作。以下是进度条的代码。目前,一切运行完毕,GUI弹出后,进度条就会出现。 该程序最初调用GUI应用程序,然后运行数据库获取代码,如下所示。 swing worker