Не могу открыть FXML через некоторое время

У меня проблема с JavaFX Scene Builder v2.0-b14.

Время от времени FXML не может открыть. Даже если я удалю все из FXML, кроме корня.
На панели задач это выглядит так:
не удается открыть FXML

Если я переименую файл, я смогу открыть FXML в обычном режиме.
переименованный FXML открывается нормально

Кто-нибудь знает/сталкивался с этой проблемой или знает, где SceneBuilder кэширует такие вещи?

привет,
Калаш


person Kalaschni    schedule 01.04.2014    source источник
comment
Спасибо. У меня тоже есть эта проблема. Это боль в ... :) Кто-нибудь зарегистрировал ошибку для этой проблемы?   -  person zmirc    schedule 14.09.2014


Ответы (8)


Несмотря на то, что этот вопрос был задан давно и на него уже получен принятый ответ, я хочу внести свой вклад в решение этой проблемы, потому что оно отличается от других решений и, кроме того, очень просто.

Эта конкретная проблема случилась со мной всего несколько минут назад, и все, что мне нужно было решить, это:

Windows XP/7

  • Открытие Диспетчера задач Windows
  • Перейдите на вкладку приложения.
  • Щелкните правой кнопкой мыши SceneBuilder (с именем: yourFileName.fxml).
  • Выберите «Развернуть»

Windows 8+

  • Открытие Диспетчера задач Windows
  • Переключиться на вкладку Процессы
  • Щелкните раскрывающийся список JavaFX Scene Builder x.x.exe.
  • Найдите файл FXML, который не открывается
  • Щелкните правой кнопкой мыши > Нажмите Развернуть.

Описание выше работает для ОС Windows, на других ОС соответствующая программа управления приложениями должна делать то же самое.

Это сработало для меня просто идеально. Копирование и/или перезапись не требуется.

person ifloop    schedule 26.08.2014
comment
спасибо, ifLoop, я попробую в следующий раз, когда получу ошибку. ;-) - person Kalaschni; 27.08.2014
comment
это работает и для меня, но, пожалуйста, добавьте свой вопрос в окно и снова разверните окно, чтобы навсегда решить эту проблему. - person Kalaschni; 30.09.2014
comment
Это исправило это для меня. Спасибо! - person Jacob Wang; 12.02.2015
comment
Это работает, но как только оно было развернуто, я потянул вниз строку заголовка и смог снова изменить размер, иначе он снова исчез. - person Andrew Grothe; 29.05.2015

Простой обходной путь:

  • скопируйте fxml в другое место
  • Открой это
  • сохранить его в исходное место (перезаписать старое)

Это всего лишь обходной путь, но он работает.
Было бы здорово, если бы для этого было найдено какое-то другое, лучшее решение.

person Kalaschni    schedule 02.04.2014
comment
Это то, что я делал некоторое время, но по какой-то причине это перестало работать и у меня в последнее время:/ - person Maverick283; 16.06.2015

Итак, попробуйте следующее: скопируйте файл fxml в другое место. Откройте построитель сценариев JavaFx и создайте свою сцену (некоторые очень простые, даже с одной панелью привязки и одной меткой или чем-то еще) и сохраните вместо вашего fxml в проекте. Теперь попробуйте, можете ли вы открыть это двойным щелчком мыши. Если да, просто скопируйте xml из исходного файла и замените xml только что созданным.

person Luke    schedule 02.04.2014
comment
спасибо за ваши усилия, ваш ответ привел меня к обходному пути, который работает для меня. - person Kalaschni; 02.04.2014
comment
Ты мой друг, мой юбиляр! Была такая же проблема. Пробовал решение Калашни, но не помогло .. ваше! Спасибо! - person Perneel; 31.07.2014

У меня была такая же проблема, и вот как мне удалось ее решить.

  1. Откройте построитель сцен JavaFX.
  2. Перетащите файл из Eclipse (или Netbeans) в Scene Builder.
  3. Отредактируйте сцену, которую вы открыли.
  4. Теперь нажмите Файл -> Сохранить как... -> Выберите расположение вашего файла FilterBox.fxml и перезапишите его.
  5. Теперь вы можете открыть файл *.fxml в Netbeans, просто дважды щелкнув файл.
person Luke    schedule 01.04.2014
comment
я не могу перетащить в свой конструктор сцен .. ни из netbeans, ни из проводника Windows. - person Kalaschni; 02.04.2014

Я сталкивался с этим несколько раз при использовании Netbeans, иногда, когда он был открыт в редакторе Netbeans, он добавлял дополнительные объявления пространства имен в корневой элемент.

e.g.

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
    <children>

    </children>
</AnchorPane>

Удаление второго экземпляра пространства имен позволяло открывать его и снова правильно загружать каждый раз.

person LinkXXI    schedule 02.04.2014
comment
я несколько раз пытался заменить дырку fxml, вставив простую структуру fxml, например, якорную панель. Но это не принесло мне никакого успеха. - person Kalaschni; 03.04.2014

Как сказал Калашни:

Простой обходной путь:

copy the fxml in some other place
open it
save it to the original place(overwrite old)

работает нормально на win 8.1 и win 7, но вы теряете свои относительные пути к CSS и так далее...

и как будто Луп сказал:

Opening the Windows Taskmanager
Switch to the applications tab
Right click the SceneBuilder (named: yourFileName.fxml)
Select 'Maximize'

работает на Win8.1 и 7 ... никаких других побочных эффектов :) хотел бы прокомментировать это, но не имеет достаточной репутации ...

person UnnameDSoS    schedule 10.09.2014

Лучший способ:

  1. Открыть конструктор сцен с рабочего стола
  2. Перейдите в Файл -> Открыть последние
  3. Нажмите «Очистить меню».
person mirzak    schedule 04.11.2014

Спасибо вам, ifloop и Дину Михану. Вы помогли мне найти решение:

private Stage stage;
private Preferences prefs = Preferences.userNodeForPackage(getClass());

@Override
public void start(Stage stage) throws Exception {
    this.stage = stage;

...

    double x = prefs.getDouble("X", 0);
    double y = prefs.getDouble("Y", 0);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

// The following four lines of code return the application to the screen.
    if(x<0 || x>screenSize.getWidth())
        x = 0;

    if(y<0 || y>screenSize.getHeight())
        y = 0;

    stage.setX(x);
    stage.setY(y);

...

    stage.show();
}

@Override
public void stop() throws Exception {

...

    double x = stage.getX();
    double y = stage.getY();

// if the window has been minimized, you will get x = -32000.0 and y=-32000.0
    if(x>=0)
        prefs.putDouble("X", x);
    if(y>=0)
        prefs.putDouble("Y", y);
}
person Oleksandr Potomkin    schedule 22.03.2019