Используйте setLocationRelativeTo(null)
Этот метод имеет особый эффект, когда вы передаете ему null
. Согласно Javadoc:
Если компонент является нулевым, или GraphicsConfiguration, связанный с этим компонентом, является нулевым, окно помещается в центр экрана.
blockquote>Это должно быть сделано после установки размера или вызова
pack()
, но прежде чем устанавливать его видимым, например:frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true);
Технически это возможно, но для этого потребуется также сохранить все выделенные системой ресурсы состояния - например, дескрипторы файлов, а затем восстановить их. Так что это сложная задача.
Самый простой способ добиться того, чего вы хотите - это использовать виртуальную машину, такую как VMWare. Когда вы приостанавливаете его, вы фактически сохраняете все состояние машины вместе со всеми запущенными программами.
Это грязно до такой степени, что невозможно иметь дело с нативным кодом, как резкое упоминание.
Однако некоторые программы (например, iirc emacs) использовали трюки «сбросить собственную память» для сохранения конфигурации, вместо того, чтобы работать с файлами конфигурации. Это не работает в Windows, так как исполняемые файлы запускаются в режиме общего доступа запрета записи. Но это милый (хотя и опасный) трюк с Linux или DOS:)
Раймонд Чен объясняет , почему это невозможно. Очевидно, что не все инженеры Microsoft читают это, потому что компилятор Visual Studio делает это при предварительной компиляции заголовков. После первой компиляции заголовков она создает свое собственное состояние и восстанавливает себя, чтобы продолжить.
Это обычно называют персистентным продолжением. Некоторые языки как SmallTalk и SBCL имеют поддержку первого класса персистентных продолжений. Большинство языков не делает.
В зависимости от Ваших требований и ОС Вы могли попытаться вызвать дамп ядра
Я никогда не пытался на самом деле загрузиться, выведенная программа ядра создают резервную копию кроме в gdb. На любые файлы кажется, что Вы имеете открытый или любое другое состояние, которое не находится в Вашей памяти программ, был бы потерян как sharptooth указанный.
Другой подход просто сериализировал бы состояние, в котором Вы нуждаетесь к диску в Вашей программе. Это сосет, но это - вероятно, самый надежный путь, если Вы не довольны приостановкой осуществления программы. Это могло быть сделано с библиотекой потока Вашей операционной системы. Или как один плакат, на который указывают с Вашей оболочкой.
Хорошо Java имеет сериализацию, и это прибывает куда-нибудь близко к нему. Хотя Вы не можете сделать этого к самому низкому уровню как адрес памяти регистров ЦП и т.д., так как это потребует, чтобы OS была в том же состоянии, которое было, когда Вы 'приостановили' процесс.
Это может быть хорошим проектом как модулем ядра Linux :-)
Основа рабочего процесса в.NET 3.0 и выше позволяет, чтобы рабочие процессы были остановлены и перезапущены.