当我创建一个.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文件时不会因某种原因而执行。 但是,如果我只是使用相同的代码但省略了线程,那就可以了。
答案 0 :(得分:0)
您必须只使用一个线程Swing的事件调度线程(EDT)与UI组件进行交互。使用以下代码创建主窗口:
SwingUtilities.invokeLater(new Runnable() { ... } );
应用程序中的并发应使用SwingWorker
对象和publish
方法完成,如果它们需要与UI交互。
创建自己的Thread
并从这些线程创建或使用Swing组件会让您感到悲伤。