当前位置: 首页 > 知识库问答 >
问题:

任务/进度条JavaFX应用程序

常雅珺
2023-03-14
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;
}

共有1个答案

姜天宇
2023-03-14

任务只能使用一次。要重用它,您必须重新实例化它,或者创建一个扩展服务的类。

服务负责创建和管理任务,其好处是不必重新附加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