¡¶¼ì²éÉíÌå²¶»ñѧԺ3.0ºº»¯°æappÏÂÔØ-¼ì²éÉíÌå²¶»ñѧԺ...¡·¾çÇé¼ò½é£ºÔÚ¶«ÓªµÄѧϰÉúÑÄÈÃÁ½È˶ÔÕâÆ¬ÍÁµØ±¬·¢ÁËÉîÖ¿µÄÇéÐ÷½áÒµºóÑîçûÁôÔÚ¶«Óª×¨ÐÄ×öµ¼ÑݶøÐìÉÙ»ªÔòËÄ´¦±¼Ã¦ÅÄÏ·ËûµÄÐÄÇéÐìÐ컺ºÍÏÂÀ´¼ì²éÉíÌå²¶»ñѧԺ3.0ºº»¯°æappÏÂÔØ-¼ì²éÉíÌå²¶»ñѧԺ...´´ÓÅ¿§ÇéÐ÷¼ÄÓ
¡¶¼ì²éÉíÌå²¶»ñѧԺ3.0ºº»¯°æappÏÂÔØ-¼ì²éÉíÌå²¶»ñѧԺ...¡·ÊÓÆµËµÃ÷£º{¸÷ÈË´º½Ú¿ìÀÖ......}IDEA²å¼þ£º¶àÏß³ÌÎļþÏÂÔØ²å¼þ¿ª·¢2021-01-09 11:54¡¤Silently9527ÕªÒªÉÏÖÜʹÓÃJava¿ª·¢ÁË´óÎļþ¶àÏß³ÌÏÂÔØ¹¤¾ßÀà×Ô¼ºÆ½Ê±µÄÎļþÏÂÔØÒ²ÔÚʹÓÃÕâ¸ö¹¤¾ßÏÂÔØËÙÂÊȷʵÌáÉý²»ÉÙ¿ÉÊÇÿ´ÎÏÂÔØ¶¼ÒªÈ¥·¿ªÏîÄ¿ÔËÐдúÂëÒÔΪ×Åʵ²»ÊǺÜÀû±ã£»Ë¼Á¿µ½ÌìÌìÎÒÃǶ¼»áʹÓõ½IDEA¿ª·¢¹¤¾ßÒÔÊǾ;öÒé°ÑÕâ¸öÏÂÔØ¹¤¾ß×ö³ÉIDEAµÄ²å¼þIDEA²å¼þÏÈÈÝIntelliJ IDEAÊÇÏÖÔÚ×îºÃÓõÄJAVA¿ª·¢IDEËü×Ô¼ºµÄ¹¦Ð§ÒѾºÜÊÇǿʢÁË¿ÉÊÇ¿ÉÄÜÎÒÃÇ»áÓöµ½Ò»Ð©¶¨ÖƵÄÐèÇóºÃ±È˵£º×Ô½ç˵´úÂëÌìÉúÆ÷£»Õâʱ¼ä¾ÍÐèÒªÎÒÃÇ×Ô¼ºÏÂÊÖÀ´Ð´Ò»¸ö²å¼þÈôÊÇÖ»ÊÇÏëÒª¿ª·¢¼òÆÓµÄ¹¦Ð§×ÅÊµÖ»ÒªÕÆÎÕÁËJava SwingÄÇô¿ª·¢IDEAµÄ²å¼þÊǺÜÈÝÒ×µÄÈôÊÇÏëѧϰ¸ü¶àµÄÔÀíºÍÉè¼ÆÀíÄî¿ÉÒÔ¿´µÄ¹Ù·½ÎĵµIDEA²å¼þ¿ª·¢°ì·¨1. ½¨ÉèGradleµÄ²å¼þ¹¤³Ì½¨ÉèÍê³ÉÏîĿ֮ºóÎÒÃÇ¿ÉÒÔ¿´Ò»ÏÂresource/META-INF/plugin.xml cn.silently9527.fast-download-idea-plugin FastDownloadPlugin Silently9527 2. ½¨ÉèÒ»¸öActionÔÚIDEAµÄ²å¼þ¿ª·¢Öлù±¾¶¼»áʹÓõ½ActionAction×Åʵ¾ÍÊÇÊÂÎñµÄ´¦Öóͷ£Æ÷¾ÍºÃ±ÈJSÖеÄonClickÒªÁìÔÚIDEAÖн¨ÉèÒ»¸öActionÊ®·Ö¼òÆÓͨ¹ýͼÐλ¯½çÃæ¾Í¿ÉÒÔÍê³É½¨ÉèÍê³Éºó¾Í¿ÉÒÔ¿´µ½ActionÀàpublic class FastDownloadAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { }}ÔÚplugin.xmlÖпÉÒÔ¿´µ½ÌìÉúµÄActionÐÅÏ¢ 3. ½¨ÉèÊäÈëÏÂÔØÐÅÏ¢µÄµ¯´°IDEA²å¼þµÄSDKÒѾ¶Ôµ¯´°¾ÙÐÐÁË·â×°Ö»ÐèÒª¼ÌÐøDialogWrapper¼´¿É½çÃæÉϵĻæÖÆÊÂÇé¶¼ÔÚcreateCenterPanelÒªÁìÖÐ×é¼þµÄ½á¹¹ÓëJavaSwingÀàËÆ@Nullable@Overrideprotected JComponent createCenterPanel() { Box verticalBox = Box.createVerticalBox(); verticalBox.add(createUrlBox()); verticalBox.add(Box.createVerticalStrut(10)); verticalBox.add(createFileDirJPanel()); verticalBox.add(Box.createVerticalStrut(10)); verticalBox.add(createThreadNumJPanel()); return verticalBox;}ÎÒÃÇÐèÒª¶ÔÊäÈëµÄÏÂÔØµØÖ·ºÍ´æ·ÅµÄ·¾¶µÄ²ÎÊý¾ÙÐÐУÑéÅжÏÊäÈëÊÇ·ñ׼ȷ¿ÉÒÔʵÏÖÒªÁìdoValidateУÑéͨ¹ý·µ»ØnullУÑéÇ·ºà¹ý·µ»ØValidationInfo¹¤¾ß@Nullable@Overrideprotected ValidationInfo doValidate() { if (StringUtils.isBlank(downloadUrlField.getText())) { return new ValidationInfo("ÎļþÏÂÔØµØÖ·±ØÌî"); } if (StringUtils.isBlank(fileDirField.getText())) { return new ValidationInfo("ÎļþÉúÑÄĿ¼±ØÌî"); } if (StringUtils.isBlank(threadNumField.getText())) { return new ValidationInfo("ÏÂÔØÏß³ÌÊý±ØÌî"); } return null;}×îÖÕ½çÃæÍê³ÉºóµÄЧ¹û4. ÔÚFastDownloadActionÖлñÈ¡µ¯´°ÊäÈëµÄÏÂÔØÐÅÏ¢DownloadDialog downloadDialog = new DownloadDialog();if (downloadDialog.showAndGet()) { // Óû§µã»÷OKÖ®ºó½øÈëµ½ÕâÀï}µ±Óû§µã»÷ÁËOKÊäÈëÐÅϢĥÁ·Í¨ÊºóÎÒÃǾͿÉÒÔ×îÏÈÏÂÔØÎļþÁËÓÉÓÚ֮ǰ×öµÄÏÂÔØ×é¼þÊÇͬ³ÌÐòÓÃΪÁ˲»ÛÕ±Õ½çÃæ²Ù×÷ÐèҪʹÓÃÏß³ÌÒì²½ÏÂÔØCompletableFuture.runAsync(() -> { try { Downloader downloader = new MultiThreadFileDownloader(threadNum, downloadProgressPrinter); downloader.download(downloadURL, downloadDir); } catch (IOException e) { throw new RuntimeException(e); }})ÔÚÏÂÔØµÄÀú³ÌÖÐÐèÒª¸øÓû§·´ÏìÈÃÓû§ÖªµÀÄ¿½ñÏÂÔØµÄ½ø¶ÈÊǼ¸¶àÒÔ¼°Ä¿½ñÏÂÔØµÄËÙÂÊÊǼ¸¶à//ʹÓÃSDK¿ªÆôÒ»¸öºǫ́ʹÃüÏß³ÌProgressManager.getInstance().run(new Task.Backgroundable(project, "File Downloading") { private long tmpAlreadyDownloadLength; //Ä¿½ñÒÑÏÂÔØ×Ö½ÚÊý private long speed; //ÿÃëÏÂÔØËÙÂÊ public void run(@NotNull ProgressIndicator progressIndicator) { // start your process while (true) { long alreadyDownloadLength = downloadProgressPrinter.getAlreadyDownloadLength(); long contentLength = downloadProgressPrinter.getContentLength(); if (alreadyDownloadLength != 0 && alreadyDownloadLength >= contentLength) { // ÏÂÔØÒÑÍê³É½ø¶ÈÌõÏÔʾ100% progressIndicator.setFraction(1.0); progressIndicator.setText("finished"); break; } setProgressIndicator(progressIndicator, contentLength, alreadyDownloadLength); sleep(); } } private void setProgressIndicator(ProgressIndicator progressIndicator, long contentLength, long alreadyDownloadLength) { if (alreadyDownloadLength == 0 || contentLength == 0) { return; } speed = alreadyDownloadLength - tmpAlreadyDownloadLength; tmpAlreadyDownloadLength = alreadyDownloadLength; double value = (double) alreadyDownloadLength / (double) contentLength; double fraction = Double.parseDouble(String.format("%.2f", value)); progressIndicator.setFraction(fraction); String text = "already download " + fraction * 100 + "% ,speed: " + (speed / 1000) + "KB"; progressIndicator.setText(text); //½ø¶ÈÌõÏÔʾÒÑÏÂÔØ°Ù·Ö±ÈÏÂÔØËÙÂÊ }});²å¼þ×°ÖÃÏÂÔØ²å¼þÖ®ºóÑ¡ÔñÍâµØ×°ÖÃ×ܽáIDEA²å¼þÏÈÈÝIDEA²å¼þ¿ª·¢µÄ»ù±¾°ì·¨ÊµÏÖÁ˶àÏß³ÌÎļþÏÂÔØ²å¼þ?ÏÖÔÚ²âÊÔÀú³ÌÖз¢Ã÷ÎļþÏÂÔØËÙÂÊÅÌË㲻̫׼ȷ¸öÌåÏ̵߳ÄÏÂÔØËÙÂÊδÄÜͳ¼ÆÔÚÄÚºóÆÚ¼ÌÐøÓÅ»¯?дµ½×îºó µã¹Ø×¢²»ÃÔ·?ÎÄÖлòÐí»á±£´æ»ò¶à»òÉÙµÄȱ·¦¡¢¹ýʧ֮´¦Óн¨Òé»òÕßÒâ¼ûÒ²·Ç³£»¶Ó¸÷ÈËÔÚ̸ÂÛ½»Á÷×îºó¡¸´´×÷²»Ò×Çë²»Òª°×æÎ¡¹Ï£ÍûÅóÙÃÇ¿ÉÒÔ¡¸µãÔÞ̸ÂÛ¹Ø×¢¡¹ÈýÁ¬ÓÉÓÚÕâЩ¾ÍÊÇÎÒ·ÖÏíµÄËùÓж¯Á¦ÈªÔ´??»Ø¸´ ¡¸Ô´Â롹 ˽·¢¸ø¸÷ÈËÔ´ÂëµØÖ· ²»ÒªÒÅÍüСÊÖÒ»¶¶µã¸östarŶ?Ïú½ÔÓÖ¾ÒÉ¿¯µÇ´úÔÐ¹ã¸æ¶à·½»ØÓ¦