2011-06-24 12 views
13

कोड में: System.out.println ("myPackage.MyClass");ईक्लीप्स कंसोल को स्रोत कोड फ़ाइलों में टेक्स्ट हाइपरलिंक करने के लिए कैसे प्राप्त करें?

ग्रहण कंसोल:

मैं निर्गम (myPackage.MyClass.myMethod) कंसोल में पर क्लिक करें myPackage.MyClass.myMethod और इसे सीधे इसी विधि, क्या अपवाद स्टैक ट्रेस के लिए होता है के लिए इसी तरह चलता । कोई उपाय?

उत्तर

8

अपवाद स्टैक निशान के लिए हाइपरलिंकिंग लाइन के अंत में दिए गए फ़ाइल नाम और रेखा संख्या पर आधारित है। जैसे

Stack trace: 

org.eclipse.jface.internal.databinding.provisional.BindingException: string property does not have a read method. 
at org.eclipse.jface.internal.databinding.internal.beans.JavaBeanObservableValue.doGetValue(JavaBeanObservableValue.java:102) 
at org.eclipse.jface.internal.databinding.internal.beans.JavaBeanObservableValue.setValue(JavaBeanObservableValue.java:83) 

पहले स्टैक ट्रेस के लिए, यह फ़ाइल JavaBeanObservableValue.java में लाइन 102 पर है। फ़ाइल को वर्तमान श्रेणी पथ में खोजा जाता है, इसलिए यदि आपके पास एक ही नाम के साथ कई कक्षाएं हैं, तो पहले हमेशा पाया जाता है ...

दूसरे शब्दों के साथ, यदि आप अपने उदाहरण के आधार पर विस्तारित हाइपरलिंकिंग जोड़ना चाहते हैं, तो आप कंसोल व्यू को थोड़ा सा विस्तारित करने की आवश्यकता है ...

... जो org.eclipse.ui.console.consolePatternMatchListeners एक्सटेंशन बिंदु के साथ किया जा सकता है। इस विस्तार बिंदु का उपयोग करना और जेडीटी से उदाहरण को देखकर बहुत आसान है, आपको अपना उदाहरण बिना काम के काम करने में सक्षम होना चाहिए ...

7

कंसोल को बनाने में कंसोल करना एक आसान तरीका है आपके लिए एक लिंक प्रारूप सरल है:

System.out.println("(" + new TestBed().getClass().getSimpleName() + ".java:" + 18 + ")"); 

स्पष्ट रूप से आप अपनी इच्छानुसार कोड में कक्षा प्रकार और रेखा संख्या प्रदान कर सकते हैं।

+0

वर्तमान लाइन की लाइन संख्या प्राप्त करने के लिए, आप फेंक सकते हैं और अपवाद और उस से लाइन नंबर ले सकते हैं। शायद आश्चर्यजनक रूप से कुशल नहीं है, लेकिन यदि आप इस तरह की चीज कर रहे हैं तो दक्षता शायद आपके बाद नहीं है। –

+0

'Class.getName' कैननिकल क्लासनाम आउटपुट करेगा - संकुल के साथ, इसलिए यह केवल तभी काम करेगा जब आप संकुल का उपयोग न करें (जो खराब कोड के लिए संकेतक है),' getSimpleName' को सभी मामलों में काम करना चाहिए – specializt

3

या, यदि आप log4j का उपयोग करें, तो आप इस तरह अपने appender कॉन्फ़िगर कर सकते हैं:

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m (%F:%L) in %t%n"/> 
    </layout> 
</appender> 

आप इसे IntelliJ विचार में भी काम करना चाहते हैं, तो आप उपयोग कर सकते हैं:

 <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m - at %c.%M(%F:%L) in %t%n"/> 
13

हो सकता है कि इस अन्य लोगों के लिए स्पष्ट है, लेकिन मुझे अन्य उत्तरों उलझन में मिला, हालांकि सही है। ग्रहण सांत्वना पार्स पैटर्न (FileName.java:lineNumber) उस फ़ाइल में है कि लाइन के लिए एक लिंक होने के लिए:

(MyFile.java:2) 

के रूप में अन्य उत्तर का कहना है, कंसोल के लिए इस उत्पादन के लिए कई तरीके हैं। रेखा में स्थान कोई फर्क नहीं पड़ता, यह सिर्फ एक पैटर्न मैच है। जैसा कि कॉलिन स्मिथ दिखाता है, log4j PatternLayout फ़ाइल नाम और लाइन नंबर प्राप्त करने के लिए (%F:%L) का उपयोग कर सकता है। फ़ाइल नाम और लाइन संख्या प्रोग्रामेटिक रूप से this question देखें।

प्रश्न एक विधि से जोड़ने के बारे में पूछता है और मेरा मानना ​​है कि आप टोननी मैडसेन द्वारा अनुशंसित कंसोल पैटर्न मैचलिस्टर्स विधि का उपयोग कर सकते हैं और this question में अधिक विस्तार से वर्णित हैं।

0

मैं एक कस्टम सांत्वना दृश्य का उपयोग और मैं एक IPatternMatchListener MessageConsole को

console.addPatternMatchListener(...) 

साथ श्रोता का उपयोग करने का एक महत्वपूर्ण लाभ जोड़ने कि घटना ऑफसेट कि हाइपरलिंक बनाने के लिए आवश्यक है प्रदान करता है।

IPatternMatchListener के कार्यान्वयन कि हाइपरलिंक बनाता है के लिए एक प्रारंभिक बिंदु के यहां पाया जा सकता:

https://github.com/mjwach/ErrorLinkyThing/blob/master/source/errorlinkything/ErrorLinkyPatternMatchListenerDelegate.java

trickiest हिस्सा लगता है फ़ाइल नाम से पूर्ण फ़ाइल पथ प्राप्त करने के लिए होने के लिए (मुझे नहीं पता लॉगर का उपयोग करें)।

आसपास चंदवा प्लगइन द्वारा उपयोग किया जाने वाला काम यहां पाया जा सकता:

http://sunshade.cvs.sourceforge.net/viewvc/sunshade/net.sourceforge.sunshade/src/net/sourceforge/sunshade/util/FileUtil.java?view=markup

देखें विधि "dereferenceWindowsLink"

मैं अभी भी एक विकल्प के लिए देख रहा हूँ।

0

यहाँ एक सरल आवरण हर किसी की उत्तरों के आधार पर विधि है कि कहीं भी इस्तेमाल किया जा सकता एक स्ट्रिंग स्वरूपित करने के लिए इतना है कि ग्रहण सांत्वना जहां getSourceCodeLine() कहा जाता है किसी भी फाइल में लाइन से लिंक होगा है। मैंने यह भी पाया कि ग्रहण में System.err को प्रिंटिंग लाल में दिखाया जाएगा।

public static String getSourceCodeLine() { 
    // An index of 1 references the calling method 
    StackTraceElement ste = new Throwable().getStackTrace()[1]; 
    return "(" + ste.getFileName() + ":" + ste.getLineNumber() + ")"; 
} 

public static void main(String[] args) 
    System.out.println("Here's a link to " + getSourceCodeLine()); 
    System.err.println("And a red link to " + getSourceCodeLine()); 
} 
संबंधित मुद्दे