我想在我的程序中使用日志.我听说过java.util.logging,但我不知道如何开始.
是否有任何关于日志记录的例子?我如何在自己的程序中使用日志记录?
我正在开发一个具有多个TextField对象的应用程序,这些对象需要更新以反映相关后端属性的更改.该TextFields为不可编辑,只有后端可能会改变他们的内容.
据我所知,正确的方法是在单独的线程上运行繁重的计算,以免阻塞UI.我这样做是使用javafx.concurrent.Task并将单个值传递回JavaFX线程updateMessage(),这很好用.但是,我需要更新多个值,因为后端会进行其处理.
由于后端值存储为JavaFX属性,我尝试将它们绑定到textProperty每个GUI元素,并让绑定完成工作.但是,这不起作用; 运行一会儿后,TextField即使后端任务仍在运行,s也会停止更新.没有例外.
我也尝试过使用Platform.runLater()主动更新TextFields而不是绑定.这里的问题是runLater()任务的调度速度比平台可以运行的速度快,因此GUI变得迟缓,即使在后端任务完成后也需要时间"赶上".
我在这里找到了一些问题:
但我的问题仍然存在.
总结:我有一个后端对属性进行更改,我希望这些更改出现在GUI上.后端是遗传算法,因此其操作被分解为离散的世代.我希望TextFields能够在几代人之间至少刷新一次,即使这会延迟下一代.更重要的是,GUI响应良好,而GA运行速度快.
如果我没有明确问题,我可以发布一些代码示例.
UPDATE
我按照James_D的建议设法做到了.为了解决后端必须等待控制台打印的问题,我实现了一个缓冲的控制台.它存储要在a中打印的字符串,StringBuffer并实际将它们附加到调用方法TextArea时flush().我使用AtomicBoolean来防止下一代发生,直到刷新完成,因为它是由Platform.runLater()runnable 完成的.另请注意,此解决方案非常慢.
我只想在JavaFX中创建可复制的标签.我试图创建没有背景,没有焦点边框和默认背景颜色的TextField,但我没有成功.我发现了很多问题如何从控制中删除焦点背景,但所有这些看起来像"黑客".
是否有任何标准解决方案来实现可复制文本?
我有一个JavaFX应用程序,并在那里有一个并发任务.当Task正在运行时,我想将updateMessage()中的消息附加到TextArea
因为绑定不会将新文本追加到TextArea,所以我使用了ChangeListener
worker.messageProperty().addListener((observable, oldValue, newValue) -> {
    ta_Statusbereich.appendText("\n" + newValue);
});
这是有效的,但不是每一次改变.我用System.out.println()检查了它,并在1到300的任务中计算
for (Integer i = 1; i <= 300; i++) {
    updateMessage(i.toString());
    System.out.println(i.toString());
}
任务中的println()给了我想要的1,2,3,4,5,6,7,8等等,但我的TextArea显示1,4,5,8,9我然后添加了一个println ChangeListener得到相同的结果,1,4,5,8,9(结果是随机的,不总是1,4,5 ......)
为什么?有没有其他方法将消息文本附加到TextAres,也许与绑定?
我目前正致力于在.log文件中记录来自我的应用程序的消息.到目前为止这工作正常,但现在我正在尝试将相同的消息输出到textarea.我一直在使用默认记录器.
这样我就有一个类可以完成记录到.log文件的所有工作,并将相同的输出写入textarea以供管理员查看.
这是一个Java swing JFrame应用程序,只包含一个textarea(我需要的全部).后台有很多工作,所有这些活动都必须记录下来进行审查/调试.
我一直在找一个很好的例子,所以我想知道你们是否可以帮助我.
我真的很难理解 JavaFX 控制器,我的目标是写入一个 TextArea 作为日志。
我的代码如下,但我希望能够从另一个类中更改值 ETC,我可以在需要时调用它。我试图创建一个扩展 Initializable 的控制器类,但我无法让它工作。有人能把我引向正确的方向吗?
我想将底部的@FXML 代码移动到另一个类并更新场景。
package application;
import javafx.event.ActionEvent;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("Root.fxml"));
            Scene scene = new Scene(root,504,325);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        launch(args);
    }
    public Thread thread = new Thread(new …我有一个 AnimationTimer,我将其用作无限循环,如下所示:
\nanimator = new AnimationTimer(){\n  @Override\n  public void handle(long now) {\n    // Update\n    Game.simulationStep();\n    // Render\n    Game.render();\n    }\n  }\n};\nanimator.start();\n处理函数每秒被调用 60 次,更新一个小游戏并渲染场景图中的一些视图。
\n我\xc2\xb4m问自己的是,如果当我有像按钮单击这样的事件时,事件的代码会在循环迭代完成后执行吗?\n还是多线程的?
\n问题是,我有一个游戏对象列表,它可以由事件操作(通过单击按钮删除游戏对象),也可以由模拟步骤中的逻辑操作。\n如果事件从该列表中删除游戏对象,而模拟步骤( ) 正在对列表中的对象执行某些操作。
\njava ×6
javafx ×4
javafx-2 ×2
logging ×2
concurrency ×1
javafx-8 ×1
scenebuilder ×1
textarea ×1