Canvas 将SWT画布添加到JPanel

Canvas 将SWT画布添加到JPanel,canvas,swt,awt,swt-awt,nattable,Canvas,Swt,Awt,Swt Awt,Nattable,我正在尝试将NatTable(扩展org.eclipse.swt.widgets.Canvas)添加到JPanel中(该程序的大多数图形都在Swing中,我对swt相当不熟悉)。我试图使用下面的代码测试SWT_AWT类,但出现错误: org.eclipse.swt.widgets.Canvas canvas = new org.eclipse.swt.widgets.Canvas( new org.eclipse.s

我正在尝试将NatTable(扩展org.eclipse.swt.widgets.Canvas)添加到JPanel中(该程序的大多数图形都在Swing中,我对swt相当不熟悉)。我试图使用下面的代码测试SWT_AWT类,但出现错误:

org.eclipse.swt.widgets.Canvas canvas =
                new org.eclipse.swt.widgets.Canvas(
                        new org.eclipse.swt.widgets.Shell(
                                Display.getDefault(),
                                1264),
                        SWT.NONE);
        java.awt.Frame frame = SWT_AWT.new_Frame(canvas); //error here
        JPanel returnMe = new JPanel();
        returnMe.add(frame);

        return returnMe;
线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中出现异常:参数无效

我不明白为什么在传递SWT组合时会出现此错误。谁能解释一下我做错了什么以及如何纠正它

另外,您将采用另一种方式:在SWT中嵌入Swing组件。相反,你需要

java.awt.Canvas canvas = ...
// assumes this code is running in SWT thread
Shell shell = SWT_AWT.new_Shell(Display.getCurrent(), canvas); 
NatTable table = new NatTable(shell, SWT.NONE); // etc.
注意,您需要安排在SWT调度线程中运行SWT代码,在AWT调度线程中运行Swing代码