2016-07-24 4 views
0

Когда я создаю файл .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. Однако, если я просто использовал тот же код, но оставил поток, он работает отлично.

+0

Вы копировать-вставить код в точности? Он имеет синтаксическую ошибку и не может быть скомпилирован. Как вы создаете jar-файл (некоторые системы сборки/экспорта в IDE/jar util)? –

ответ

0

Чтобы взаимодействовать с компонентами пользовательского интерфейса, вы должны использовать только один поток, отправляющий поток Swing (EDT). Создание главного окна с этим кодом:

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

параллельность в заявке должна быть сделана с помощью SwingWorker объектов и метод publish, если они должны взаимодействовать с пользовательским интерфейсом.

Создание собственных Thread s и создание или использование компонентов Swing из этих потоков вызовет у вас горе.

См

Смежные вопросы