如果.jar文件有多个线程,则无法使用该文件



当我创建一个.jar文件,程序只使用主线程时,一切都很好,但当我需要并发并添加自己的线程时,.jar文件不会打开或运行,我双击它。

下面是一个例子:

class idk {
    public static void main(String args[]) throws Exception {
        new Thread(new Runnable() {
            public void run() {
                try {
                    JFrame j = new JFrame();
                    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    j.setVisible(true);
                    j.getContentPane().setPreferredSize(new Dimension(800, 500);
                    j.pack();
                    j.setLocationRelativeTo(null);
                } catch(Exception e1) {}
            }
        }).start();
     }
}

当编译到.jar文件中时,由于某些原因,上面的代码将不会执行。然而,如果我只是使用了相同的代码,但忽略了线程,它就可以正常工作。

您必须只使用一个线程,即Swing的事件调度线程(EDT)来与UI组件交互。使用以下代码创建您的主窗口:

SwingUtilities.invokeLater(new Runnable() { ... } );

应用程序中的并发应该使用SwingWorker对象和publish方法来完成,如果它们需要与UI交互的话。

创建自己的Thread并从这些线程创建或使用Swing组件会让你感到悲伤。

请参阅Swing 中的并发

最新更新