Я сталкиваюсь со странной проблемой при попытке запустить свинг-проект из Gradle из виртуальной машины (гипервизор - kvm).
Код работает нормально при каждой попытке хост-ОС, но зависает метод jframe.pack()
чаще всего запускается изнутри гостя. Я предполагаю, что проблема заключается в синхронизации потоков.
Как и в большинстве приложений Swing, нереально c пытаться опубликовать код для показа здесь .... но я могу указать на это в GitHub
В противном случае я не играю с потоками каким-либо огромным образом, просто позволяю свингу управлять собой. Я также предоставляю гостю достаточно ресурсов и не испытываю проблем с запуском любого другого приложения.
Я не очень хорошо знаком с нюансами потоков, которые здесь происходят, что может быть источником выдавать? Я не делаю ничего необычного в создании собственных тем и т. Д. c. Я просто настраиваю свой пользовательский интерфейс, как обычно, и позволяю Swing обрабатывать свои потоки.
Хост:
- Поток CentOS 8
- 8 ядро / 32g RAM
- Java 8
Гость:
- Ubuntu 19.10
- выделено 8 ядер / 16g RAM
- Java 8
Упрощенный обзор настройки приложения Swing:
class Runner(){
private Gui gui;
public runGui(){ //what is run to run the gui
gui = new Gui();
}
}
// partially setup with Intellij's form builder
class Gui(){
private JFrame mainFrame;
//many other member variables and functions
public void Gui(){
//general setup of GUI code. generation of elements, event binding, etc
this.mainFrame = new JFrame();
...
// pack and open
this.mainFrame.pack();
this.mainFrame.setVisible(true);
}
{
//intellij autogenerated form builder. Standard setup code.
$$$setupUI$$$();
}
}