当我创建一个.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 中的并发