JavaFX не отвечает / очень медленный на встроенной системе низкого уровня? - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь реализовать простой графический интерфейс JavaFX - имеется в виду несколько кнопок, текстовая область, несколько кружков (как подсветка) и несколько ярлыков.

Обратите внимание, что ни одна из функций для этих предметов еще не была создана. Так что все эти предметы по сути пустые. Обратите внимание, что это мое первое приложение на JavaFX (я всегда работал на Swing).

Так что работа в Eclipse на моем ноутбуке i7 не имеет проблем и работает без нареканий. Когда я пытаюсь запустить его на целевой машине (см. Спецификации ниже), я получаю 15-секундное окно без ответа. Как только появляется графический интерфейс пользователя, любые щелчки на любых элементах окна вызывают ~ 10 секунд скачка ЦП до 50%.

Еще раз: нет кода ни за одной из кнопок, индикаторов или текстовой области. Разве JavaFX не предназначен для работы в такой бюджетной системе?

Технические характеристики: Windows Embedded 32bit (6.1) Intel Atom E680 @ 1,6 ГГц 2 ГБ оперативной памяти DX11 Встроенные носители и графика Atom E6xx

Код приведен ниже, если кому-то это нужно.

Main:

public static void main(String[] args)
{

    // Initialize GUI

    gui = RecorderFXApplication.getGUIInstance();
    guiCtrl = gui.getFXMLController();
}

Применение:

public class RecorderFXApplication extends Application
{

    /**
     * Standard error logger for log4j2
     */
    static Logger errorLog = LogManager.getLogger(RecorderFXApplication.class.getName());

    private static RecorderFXApplication instance = null;

    private FXMLLoader fxmlLoader;

    public RecorderFXApplication()
    {
        super();
    }

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        fxmlLoader = new FXMLLoader(getClass().getResource("/RecorderGUI.fxml"));

        try
        {
            Pane root = (Pane) fxmlLoader.load();
            Scene scene = new Scene(new Group(root));
            primaryStage.setScene(scene);
            primaryStage.show();
            primaryStage.titleProperty().set("Faceboss Database Recorder");
            instance = this;

        } catch (IOException exception)
        {
            errorLog.error("Error loading fxml for view: " + exception);
        }
    }

    @Override
    public void stop() throws Exception
    {
        super.stop();
        System.exit(0);
    }

    /**
     * @return the instance
     */
    public static RecorderFXApplication getGUIInstance()
    {
        if (instance == null)
        {
            new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    Application.launch(RecorderFXApplication.class);
                }
            }).start();
        }
        while (instance == null)
        {
            try
            {
                Thread.sleep(1);
            } catch (InterruptedException e)
            {
                errorLog.error("Error getting instance " + e);
            }
        }
        return instance;
    }

    public RecorderFXController getFXMLController()
    {
        while (fxmlLoader.getController() == null)
        {
            try
            {
                Thread.sleep(1);
            } catch (InterruptedException e)
            {
                errorLog.error("Error getting controller " + e);
            }
        }
        return fxmlLoader.<RecorderFXController> getController();
    }

}

Контроллер:

public class RecorderFXController implements Initializable
{
    /**
     * Standard error logger for log4j2
     */
    static Logger errorLog = LogManager.getLogger(RecorderFXController.class.getName());

    @FXML
    private TextArea logWindow;

    @FXML
    private Button startRecButton;

    @FXML
    private Button stopRecButton;

    @FXML
    private Button pauseRecButton;

    @FXML
    private Button exportButton;

    @FXML
    private Circle redLight;

    @FXML
    private Circle yellowLight;

    @FXML
    private Circle greenLight;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1)
    {

    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...