如何使用代码将一个或多个包正确地移动到java中的另一个包中

如何使用代码将一个或多个包正确地移动到java中的另一个包中,java,package,move,eclipse-jdt,Java,Package,Move,Eclipse Jdt,我正在开发一个应用程序[桌面swing应用程序],它需要我通过代码进行重构。[我知道eclipse IDE已经提供了接口和功能,但我需要通过代码来实现这一点 我需要做的重构的第一个阶段是移动选定的包[要选择的选项通过复选框给出,该复选框使用JDT的思想显示工作区中所有可用的包。我在这个位置使用了教程:] 现在我已经选择了我希望移动到另一个包的包 我使用了这段代码 233. for (IPackageFragment mypackage : packages) { 234.

我正在开发一个应用程序[桌面swing应用程序],它需要我通过代码进行重构。[我知道eclipse IDE已经提供了接口和功能,但我需要通过代码来实现这一点

我需要做的重构的第一个阶段是移动选定的包[要选择的选项通过复选框给出,该复选框使用JDT的思想显示工作区中所有可用的包。我在这个位置使用了教程:]

现在我已经选择了我希望移动到另一个包的包

我使用了这段代码

233.   for (IPackageFragment mypackage : packages) {
234.                    if ((mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) && (searchifSelected(mypackage.getElementName())==true) ){
235.                        IJavaElement container = newModule.getPrimaryElement();
236.                        mypackage.move(container, null, null, true, null);
                }
     }
searchifSelected(mypackage.getElementName())==true告诉我是否已选择要移动的特定包

IJavaElement container=newModule.getPrimaryElement();是将包含所选包的容器[新包]

mypackage.move(container,null,null,true,null);据我所知,这个命令应该将“mypackage”作为“child”移动到“container”

然而,我面临着这个问题:

 Java Model Exception: Java Model Status [Invalid destination: 'devFromSupplier [in src [in test]]']
at org.eclipse.jdt.internal.core.MultiOperation.processElements(MultiOperation.java:175)
at org.eclipse.jdt.internal.core.CopyResourceElementsOperation.processElements(CopyResourceElementsOperation.java:417)
at org.eclipse.jdt.internal.core.MultiOperation.executeOperation(MultiOperation.java:90)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793)
at org.eclipse.jdt.internal.core.JavaModel.runOperation(JavaModel.java:297)
at org.eclipse.jdt.internal.core.JavaModel.move(JavaModel.java:258)
at org.eclipse.jdt.internal.core.PackageFragment.move(PackageFragment.java:420)
at newmodulewizrd.ui.Integrate.printPackageInfos(Integrate.java:236)
at newmodulewizrd.ui.Integrate.printProjectInfo(Integrate.java:177)
at newmodulewizrd.ui.Integrate.getWorkSpace(Integrate.java:149)
at newmodulewizrd.ui.Integrate.moveToOneModule(Integrate.java:120)
at newmodulewizrd.ui.Integrate$1.actionPerformed(Integrate.java:79)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我认为这意味着我给出了错误的论点


有人能帮我做些什么吗?

我在eclipse论坛[我使用的IDE]上发布了这个问题,然后发现这个问题/bug的方法无法在循环中工作。你必须一个接一个地显式调用这个函数。在这个链接中也报告了类似的bug:


[w.r.t delete method]

对于那些面临同样问题的人,我找到了另一种方法,即使用rename方法并使其作为移动函数工作。尽管它可能是/可能不是最好的选择

我用这个代码替换上面的代码

     for (IPackageFragment mypackage : packages) {
                if ((mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) && (searchifSelected(mypackage.getElementName())==true) ){
                    mypackage.rename(textfield.getText()+"."+mypackage.getElementName(), true, null);
                }
            }

你能把行号包括到你的代码段中吗?对不起,我没有领会你的意思?@rana,我已经加了行numbers@carl:我之前提到过,我必须通过代码来完成这项工作,而不使用IDE的功能