Я пытаюсь реализовать простой графический интерфейс 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)
{
}
}