Как запустить файл на переднем плане? - PullRequest
2 голосов
/ 30 октября 2011

Запустить файл = запустить программу, связанную с данным файлом, и автоматически открыть этот файл при запуске программы.

Допустим, я запускаю IntelliJ IDEA, я запускаю свой код и главное окно(модальный) моей программы обнаруживается.Моя программа находится на переднем плане.

Затем я запускаю файл .pdf (сейчас это означает, что AcroReader будет выполняться) из моей программы.AA появится перед IntelliJ, но за моей программой.

Вопрос

Я бы хотел, чтобы AA (это просто пример здесь) был показан перед моей программой, а непозади.Как это сделать?

Обратите внимание, это не значит, что я бы хотел переместить свою программу в фоновый режим!

Для запуска файлов я использую

java.awt.Desktop.getDesktop().open(new java.io.File(filepath));

Мой графический интерфейс выполнен в Swing.

Обновление 1

Чтобы исключить любое влияние пользовательских виджетов, событий и т. Д., Я помещаюпросто JButton внизу моего окна (JDialog) - это в Scala, но эта часть похожа на синтаксис Java:

var dlg = new javax.swing.JDialog(null,"test",Dialog.ModalityType.DOCUMENT_MODAL);
dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

var button = new JButton("Select Me");
var actionListener = new ActionListener() {
      def actionPerformed( actionEvent : ActionEvent) = {
        java.awt.Desktop.getDesktop().open(new java.io.File("test.pdf"))
      }
    };

button.addActionListener(actionListener);
dlg.add(button, BorderLayout.SOUTH);
dlg.setSize(300, 100);
dlg.setVisible(true);

После нажатия на кнопку «AA» отображается позади моего приложения.Так как запуск АА занимает несколько секунд, я также попытался нажать кнопку и убрать мышь из моего окна.Точно такое же поведение.

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

1 Ответ

1 голос
/ 31 октября 2011

Вы можете попробовать что-то вроде этого.На моей машине (Ubuntu 10.4 LTS с Gnome2) он дает evince (pdf-viewer) спереди, а если я закрываю / скрываю evince - JDialog помещается назад вперед.очень отличается, так как на самом деле без "dlg.toBack ();"Поведение вызова такое же.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class OpenFileTest {

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            final JDialog dlg = new javax.swing.JDialog(null, "test", JDialog.ModalityType.DOCUMENT_MODAL);
            dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            JButton button = new JButton("Select Me");
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        java.awt.Desktop.getDesktop().open(
                                new java.io.File("/home/user/Downloads/jfreechart-1.0.13-US.pdf"));
                        dlg.toBack();
                    } catch (IOException e1) {
                        throw new RuntimeException(e1);
                    }
                }
            });
            dlg.add(button);
            dlg.setVisible(true);
        }
    });
}
}
...