gpt4 book ai didi

java - 如何在前台启动文件?

转载 作者:行者123 更新时间:2023-11-30 11:50:30 28 4
gpt4 key购买 nike

启动文件 = 启动与给定文件关联的程序,并在程序启动时自动打开该文件。

假设我运行 IntelliJ IDEA,我运行我的代码并显示我的程序的主窗口(模态)。我的程序在前台。

然后我从我的程序启动一个 .pdf 文件(现在这意味着 AcroReader 将被执行)。 AA 将出现在 IntelliJ 之前但在我的程序之后。

问题

我希望AA(当然这里只是一个例子)显示在我程序的前面,而不是后面。怎么做?

请注意,这并不意味着我想将我的程序移至后台!

我使用的启动文件

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

我的 GUI 是在 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 会显示在我的应用程序后面。由于运行 AA 需要几秒钟的时间,我还尝试单击该按钮,并将鼠标移离我的窗口。完全相同的行为。

我还注意到 AA 显示在与我的窗口相同的相对位置,AA 的左上角靠近我的应用程序的右下角。

最佳答案

你可以尝试这样的事情。在我的机器上(带有 Gnome2 的 Ubuntu 10.4 LTS)它在前面给出了证据(pdf-viewer),如果我关闭/隐藏证据 - JDialog 被放回前面。

在 Windows 上它可能非常不同,因为实际上没有“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);
}
});
}
}

关于java - 如何在前台启动文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947309/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com