Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建Java消息对话框(swing/awt/other)的最快方法?_Java_User Interface_Swing_Dialog_Awt - Fatal编程技术网

创建Java消息对话框(swing/awt/other)的最快方法?

创建Java消息对话框(swing/awt/other)的最快方法?,java,user-interface,swing,dialog,awt,Java,User Interface,Swing,Dialog,Awt,我正在创建一个Java应用程序,该应用程序将执行一些处理,然后需要显示一条消息以向用户提供反馈 然而,它看起来非常慢——需要两秒钟才能返回 我从源代码中找出了明显的罪魁祸首,下面是使用的代码: package SwingPlay; import javax.swing.JFrame; public class Dialog { public static void main( String[] args ) { JFrame frame = new JFra

我正在创建一个Java应用程序,该应用程序将执行一些处理,然后需要显示一条消息以向用户提供反馈

然而,它看起来非常慢——需要两秒钟才能返回

我从源代码中找出了明显的罪魁祸首,下面是使用的代码:

package SwingPlay;

import javax.swing.JFrame;

public class Dialog
{

    public static void main( String[] args )
    {
        JFrame frame = new JFrame( "DialogDemo" );
    }

}
我通过以下命令行执行此操作:

java -classpath . SwingPlay.Dialog
正如你所看到的,我只是创建了一个JFrame,甚至没有显示它

如果相关,以下是我的
java-version
输出:

java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
这是(目前)针对WinXP SP2运行的


那么,第一个问题:为什么它这么慢

更重要的是,我只想毫不延迟地显示一条简单的消息(GUI,而不是cmdline)——有人能提供一些代码来做到这一点吗


更新:

一点背景知识可能会有所帮助:
我正在创建一个应用程序,它将有许多“头”(即,不同的用户界面都使用相同的核心类来完成复杂的部分)。
我目前有一个纯命令行的头,它工作得很好-直接响应。
我还将拥有一个带有常规点击式GUI的标准应用程序,并且不会预见到这方面的问题。
我目前正在研究的是这两种方法的混合——它将从一个运行箱(或类似的启动器)启动,可能带有参数,并且只需要有效地响应一条状态消息,只需按下一个键即可解除

后者是问题的焦点


虽然我并不反对将我现有的命令行版本与shell脚本一起使用(尽管我不认为这是必要的!),但现有的答案似乎表明,对我来说,运行速度不如对其他人来说快——一个例子对我来说需要1460ms,与70毫秒相比,这是一个显著的差异。

你可能想要的是。这将不必等待JVM加载(加载任何VM都会有成本),而是提前加载屏幕。

另外,创建一个(或者可能是一个)而不是一个会快得多,因为后者必须引入大量的附加类文件。

哦,如果您真的不需要从Java显示对话框,您可以研究使用(或它的GNOME对应项)或类似的东西。

我会使用a来显示消息。下面是一个简单的例子:

import javax.swing.*;

public class OptionDemo {
    public static void main(String[] args) throws Exception {
        JOptionPane.showMessageDialog(null, "Hello World");
    }
}

不过,恐怕我无法解释你的延误。在我的系统上,您的代码片段在500毫秒内运行。

您可以使用JOptionDialog

JOptionPane.showMessageDialog([parent frame], [message], [title], JOptionPane.MESSAGE_TYPE);

Java在这方面是错误的工具。设置JVM需要在第一行Java代码可以执行之前在后台发生很多事情,而且真的没有办法绕过它。

延迟的原因是因为Java是一种解释性语言,启动新的JVM(解释器)需要时间

实际上创建帧只需不到几毫秒(在我的机器中大约70毫秒)

如果这将在Java应用程序中使用,您无需担心。它几乎是即时的(您应该使用JDialog或JOptionPane进行此操作)

如果这不适用于java应用程序,2秒太多(我想它太多了),你应该考虑另一个工具来做这个工作。 以下是我在代码中测量时间的方法:

import javax.swing.JFrame;

public class Dialog {

    public static void main( String[] args ) {
        long start = System.currentTimeMillis();
        JFrame frame = new JFrame( "DialogDemo" );
        System.out.println( "Took: " + (  System.currentTimeMillis() - start   ) );
    }

}

你有没有试过像这样通过分析器运行它?如果标准库中有一个瓶颈,那么这是找到它的好方法。

是否需要使用java来显示消息框?如果该框来自应用程序外部,则可能需要使用其他内容来生成对话框

要制作一个只显示命令行字符串中的消息框的本机windows应用程序,最多只需要几个小时。大多数常见的脚本语言也应该有这样做的方法。下面是一些人通过命令行通过javascript编写的示例:


既然您对加快速度很感兴趣,而且大部分开销似乎都是JVM启动开销,那么请查看以下内容:保持JVM始终在后台运行,以解决JVM启动缓慢的问题。在您的情况下,在一次运行之后,Swing库也将被缓存(希望在多次运行之后也被JIT缓存),从而进一步减少开销


但是,由于后台JVM的存在,这种方法会导致内存使用量增加,并且还会导致其他问题,因为确定何时关闭它可能并不简单。

我不想显示静态图像,而是要显示动态文本。换句话说,我想将stdout重定向到GUI消息框。如果我真的使用System.out.println,它返回的速度足够快,但显然不是正确的格式。应用程序的核心需要是Java,但如果使用基本接口速度太慢,那么我可以使用shell脚本来显示程序的响应。是的,Java中与GUI相关的东西的第一次实例化总是很慢(er),除非是本机的(通过JNI或使用Runtime.exec()),否则无法防止这种情况发生。虽然Java.awt.Frame速度更快,但仍然需要一秒钟的延迟(是的,不幸的是,它不是很快。如果你在一个程序中拥有所有东西,那么在执行真正的动作之前创建框架,然后在完成后简单地显示出来。整体来说它不会更快,但看起来肯定会更快。真正的动作发生在眨眼之间,所以不幸的是,我甚至不会获得那种错觉……这似乎是鲁格与我尝试的AWT示例的速度相同(超过一秒,可能在1.5s左右),这是一个改进,但仍然令人烦恼地慢。如果我可以将速度提高到500ms,这可能是可以接受的。如果JVM是原因,为什么它在通过System.out.println('Text')输出到控制台时不慢?@Peter:因为如果AWT子系统不是nee,JVM不会初始化它