可以使用Display.getDefault()。asyncExec(new Runnable()来使用线程中的对话框,但是获得无效的线程访问权限

时间:2018-11-19 12:50:47

标签: java multithreading

我尝试从远程主机获取系统信息,并将其显示在新窗口中。

我的代码如下:

    public static void executedisplaySystemInfo(Table table, Login login) {
    Thread t = new Thread(new Runnable() {
        public void run() {
            displaySystemInfo(table,login);
        }
    }); 
    t.start();

}

public static void displaySystemInfo (Table table, Login login) {
    for(TableItem tableItem : table.getItems()){
        try {
            if(tableItem.getChecked()) {    


                String a = output.getOutputFromProgram("cmd.exe /c systeminfo /s " + tableItem.getText(3) + " /U .\\" + SettingsManager.getSetting(login, "Current-User") + " /p " + SettingsManager.getSetting(login, SettingsManager.getSetting(login, "Current-User")+"-PW"));



                Display.getDefault().asyncExec(new Runnable() {
                    public void run() {
                        JFrame systeminfoFrame = new JFrame();
                        systeminfoFrame.setTitle( tableItem.getText(3) + ": Ausgabe" );
                        systeminfoFrame.setSize(600, 700);
                        JPanel panel = new JPanel();

                        JTextArea systeminfotext = new JTextArea(40,50);

                        systeminfotext.setText(a);

                        systeminfotext.setLineWrap(true);
                        systeminfotext.setWrapStyleWord(true);

                        JScrollPane scrollpane = new JScrollPane(systeminfotext);

                        panel.add(scrollpane);
                        systeminfoFrame.add(panel);
                        systeminfoFrame.setVisible(true);
                    }
                });


            }


        }
        catch (IOException e) {             
        }
    }


}

我已经准备使用Display.getDefault()。asyncExec(new Runnable()来将线程信息传递给ui线程,但是无论如何都会获得“无效的线程访问”。

这有什么不对?

感谢您的帮助。

hex

0 个答案:

没有答案