Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Swing小部件插入SWT我在线程中遇到异常;“主要”;使用SWT_AWT.new_框架时发生java.lang.IllegalArgumentException_Java_Swing_Eclipse Plugin_Swt_Jface - Fatal编程技术网

如何将Swing小部件插入SWT我在线程中遇到异常;“主要”;使用SWT_AWT.new_框架时发生java.lang.IllegalArgumentException

如何将Swing小部件插入SWT我在线程中遇到异常;“主要”;使用SWT_AWT.new_框架时发生java.lang.IllegalArgumentException,java,swing,eclipse-plugin,swt,jface,Java,Swing,Eclipse Plugin,Swt,Jface,您好,我是eclipse的新手,我想在SWT中的现有代码中添加一个像JCombobox这样的Swing组件。有没有办法通过SWT或Swing中可用的API来实现这一点 我使用了SWT\u AWT.new\u Frame(composite)API。这是我的密码 public static void main(String[] args) { final Display display = new Display(); final Shell shell = new

您好,我是eclipse的新手,我想在SWT中的现有代码中添加一个像JCombobox这样的Swing组件。有没有办法通过SWT或Swing中可用的API来实现这一点

我使用了SWT\u AWT.new\u Frame(composite)API。这是我的密码

public static void main(String[] args) {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        Composite composite = new Composite(shell, SWT.NO_BACKGROUND);
        Frame myframe = SWT_AWT.new_Frame(composite);
        Panel mypanel = new Panel(new BorderLayout()) {
            @Override
            public void update(java.awt.Graphics g) {
                paint(g);
            }
        };
        myframe.add(mypanel);
        JRootPane root = new JRootPane();
        mypanel.add(root);
        java.awt.Container contentPane = root.getContentPane();
        String languages[]={"C","C++","C#","Java","PHP"};        
        final JComboBox cb=new JComboBox(languages);  

        JScrollPane scrollPane = new JScrollPane(cb);
        contentPane.setLayout(new BorderLayout());
        contentPane.add(scrollPane);

        shell.open();
        while(!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();
    }
我得到以下例外

Exception in thread "main" java.lang.IllegalArgumentException: Argument not valid
    at org.eclipse.swt.SWT.error(SWT.java:4533)
    at org.eclipse.swt.SWT.error(SWT.java:4467)
    at org.eclipse.swt.SWT.error(SWT.java:4438)
    at org.eclipse.swt.awt.SWT_AWT.new_Frame(SWT_AWT.java:129)

实际上,您已经使用了正确的API。但是您没有添加诸如在创建复合时将AWT小部件嵌入SWT这样的功能SWT.嵌入式

Composite composite = new Composite(shell, SWT.NO_BACKGROUND | SWT.EMBEDDED);
        Frame frame = SWT_AWT.new_Frame(composite);

有关此API用法的更多信息,请浏览此链接。

有一个桥梁;但总的来说应该避免,因为它有一些小问题。为什么不能使用Eclipse SWT小部件?@KevinO是的,这是正确的。但是这个应用程序很旧,他们现在希望我添加这样的功能。