Ответ 1
Существует способ, используя два разных этапа, но может иметь проблемы (тестируется только в Windows 7). В следующем примере используется Java 8/JavaFX 8.
Этот код устанавливает значок, который отображается на панели задач на основном этапе, полученном при запуске JavaFX, но делает сцену невидимой (прозрачный, нулевой размер). Затем он открывает новое и видимое окно с другим значком.
Поскольку это только дочернее окно, а не реальное, событие hide должно быть делегировано на скрытый этап, чтобы закрыть приложение. Может быть больше событий, которые должны быть делегированы, как минимизация окна.
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.getIcons().add(getImage("taskbar_icon.png"));
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setWidth(0);
primaryStage.setHeight(0);
primaryStage.show();
Stage visibleStage = new Stage();
visibleStage.initOwner(primaryStage);
visibleStage.getIcons().add(getImage("window_icon.png"));
visibleStage.setScene(new Scene(...));
visibleStage.setOnHidden(e -> Platform.runLater(primaryStage::hide));
visibleStage.show();
}
}