2015-01-16 8 views
7

द्वारा समर्थित नहीं है जब मैं अपनी परियोजना में परिवर्तित विधि निकायों के साथ कक्षा (हॉट स्वैप) को पुनः लोड करने का प्रयास करता हूं तो मुझे यह त्रुटि मिली। इससे पहले कि सब कुछ ठीक काम करता है, लेकिन अचानक यह बंद हो जाता है और मुझे कुछ भी याद नहीं है जो एक कारण हो सकता है। अजीब बात यह है कि मेरे पास एक ही सेटिंग है और विधि निकायों के लिए गर्म स्वैप ठीक काम करता है।इंटेलजे आइडिया टॉमकैट हॉट स्वैप असफल: स्कीमा परिवर्तन लागू नहीं किया गया ऑपरेशन वीएम

enter image description here

enter image description here

और मेरे वीएम सेटिंग्स:

-XX:PermSize=512m 
-XX:MaxPermSize=1024m 
-Xms1024m 
-Xmx2048m 
-Dcatalina.home="C:\Programy\apache-tomcat-7.0.57" 
-Djava.endorsed.dirs="C:\Programy\apache-tomcat-7.0.57\endorsed" 
-javaagent:C:\Programy\apache-tomcat-7.0.57/lib/spring-instrument-3.1.2.RELEASE.jar 
-Dspring.profiles.active=closeMonthTest 
-Dnpk.jobs.enabled=true 

और यहाँ मेरी काम कर के लिए विन्यास है

यहाँ के लिए विन्यास नहीं काम परियोजना है परियोजना:

enter image description here

enter image description here

वी एम विकल्प:

-XX:PermSize=512m 
-XX:MaxPermSize=1024m 
-Xms1024m 
-Xmx2048m 
-Dcatalina.home="C:\Programy\apache-tomcat-7.0.57" 
-Djava.endorsed.dirs="C:\Programy\apache-tomcat-7.0.57\endorsed" 
-javaagent:C:\Programy\apache-tomcat-7.0.57/lib/spring-instrument-3.1.2.RELEASE.jar 
-Dspring.profiles.active=test 

उत्तर

7

यह कोड के बिना मूल कारण को खोजने के लिए बहुत मुश्किल है। हालांकि, मैं एक कृत्रिम परीक्षण मामले में जहां जावा कम्पाइलर सिंथेटिक तरीकों पैदा करेगा लिख ​​सकते हैं, भले ही मैं सिर्फ एक विधि शरीर को बदल:

public class Test { 

    static class Inner { 

     private void getPrivate(int i) { 
      Thread.dumpStack(); 
     } 

     private void getPrivate() { 
      Thread.dumpStack(); 
     } 
    } 

    public static void main(String[] args) { 
     Inner inner = new Inner(); 
     inner.getPrivate(0); 
     inner.getPrivate(); 
    } 
} 

इस आशय एक कृत्रिम विधि का उपयोग $ 000 जो javac एक्सेस करने के लिए उत्पन्न करता है द्वारा समझाया गया है इनर क्लास का एक निजी सदस्य।

javac Test.java 
javap -c -private Test\$Inner 
... 
    static void access$000(edu.Test$Inner, int); 
    Code: 
     0: aload_0  
     1: iload_1  
     2: invokespecial #2     // Method getPrivate:(I)V 
     5: return   

    static void access$100(edu.Test$Inner); 
    Code: 
     0: aload_0  
     1: invokespecial #1     // Method getPrivate:()V 
     4: return   

के मुख्य में दो तरीकों का क्रम बदल डालते हैं:

public static void main(String[] args) { 
     Inner inner = new Inner(); 
     inner.getPrivate(); 
     inner.getPrivate(0); 
    } 

एक परिणाम संकलक तरीकों हस्ताक्षर बदल गया है के रूप में।

... 
    static void access$000(edu.Test$Inner); 
    Code: 
     0: aload_0  
     1: invokespecial #2     // Method getPrivate:()V 
     4: return   

    static void access$100(edu.Test$Inner, int); 
    Code: 
     0: aload_0  
     1: iload_1  
     2: invokespecial #1     // Method getPrivate:(I)V 
     5: return  

देखने के Hotswap बिंदु से इस परिवर्तन निषिद्ध क्योंकि विधि access$000 के हस्ताक्षर बदल गया था है।

+1

अच्छा जवाब, धन्यवाद – Regenschein

संबंधित मुद्दे