Java: System.out.println и System.err.println не в порядке

Ниже приведен пример передачи параметров в документ fxml через пространство имен.

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1">
    <BorderPane>
        <center>
            <Label text="$labelText"/>
        </center>
    </BorderPane>
</VBox>

Определить значение External Text для переменной пространства имен labelText:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class NamespaceParameterExampleApplication extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {
        final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("namespace-parameter-example.fxml"));

        fxmlLoader.getNamespace()
                  .put("labelText", "External Text");

        final Parent root = fxmlLoader.load();

        primaryStage.setTitle("Namespace Parameter Example");
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }
}
50
задан Nick Heiner 10 December 2009 в 19:20
поделиться

2 ответа

Это разные потоки, которые сбрасываются в разное время.

Если вы поместите

System.out.flush();
System.err.flush();

в свой цикл, это будет работать, как ожидалось.

Чтобы уточнить, выходные потоки кэшируются, поэтому вся запись идет в этот буфер памяти. После периода молчания они фактически записываются.

Вы записываете в два буфера, а затем после периода бездействия они оба сбрасываются (один за другим).

36
ответ дан 7 November 2019 в 11:01
поделиться

В Eclipse а именно, Вы теперь имеете, с , Eclipse 2019-09 синхронизировал стандартный вывод и вывод ошибок в консоли.

представление Eclipse Console в настоящее время не может гарантировать, что смешал стандартный вывод, и вывод ошибок показывают в том же порядке, как это производится рабочим процессом.

Для JAVA-приложений конфигурация запуска Общая Вкладка теперь предоставляет возможность объединять стандартный вывод и вывод ошибок.
Это гарантирует, что стандартный вывод и вывод ошибок показывают в том же порядке, он был произведен, но в то же время отключает человека, окрашивающего вывода ошибок.

https://www.eclipse.org/eclipse/news/4.13/images/merge-process-output.png

0
ответ дан 7 November 2019 в 11:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: