notepad++编译并运行java (自定义包)

  最近用Notepad++写汇编,感觉用起来挺顺手,于是想能不能也在这个优秀的编辑器下编写java并编译运行呢,因为每次启动eclipse都要挺长时间,而且eclipse实在太占内存了。。。

  于是各种百度之后,看网上的教程,使用Notepad++的NppExec(Notepad++的一个插件)实现了这一点。

  附网址:http://jingyan.baidu.com/article/a65957f4fedcc424e67f9bd1.html

      http://jingyan.baidu.com/article/7082dc1c712b77e40a89bd8d.html

教程里基本都是用到了这两个命令:

javac -encoding UTF-8 "$(FULL_CURRENT_PATH)"

java -cp "$(CURRENT_DIRECTORY)" "$(NAME_PART)"

//
Notepad++的环境变量

变量名称

含义

FULL_CURRENT_PATH

文件路径名称 

CURRENT_DIRECTORY  

文件目录 

FILE_NAME  

文件全名称

NAME_PART 

文件名称

EXT_PART 

文件扩展名 

 

 

 

然而,我写的Java代码里大都使用了package语句,使用这两个命令运行时就会出现“找不到或无法加载主类”的错误。

最后实在没办法,我就用C++写了两个程序。

   //myjavac.cpp

1
#include <iostream> 2 #include <windows.h> 3 #include <string> 4 #include <sstream> 5 #include <fstream> 6 using namespace std; 7 8 int main(int argc,char* args[]) 9 { 10 11   string s1(args[1]),s2(args[2]); 12   string j; 13   j="javac -d "+s1+" "+s2; //javac -d directory_name file_name 14   cout<<j<<endl; 15 system(&j[0]); 16 system("Pause"); 17 return 0; 18 }

 

   //myjava.cpp

1
#include <iostream> 2 #include <windows.h> 3 #include <string> 4 #include <sstream> 5 #include <fstream> 6 using namespace std; 7 8 int main(int argc,char* args[]) 9 { 10 string name,name1; 11 stringstream tp,tp1; 12 string ss(args[1]); 13 int index=0; 14 for( int ind=0;ind<=ss.length();ind++){ 15 if(ss[ind]=='\\'||ss[ind]=='\\\\'){ 16 index=ind; 17 } 18 } 19 for(int in=index+1;in<=ss.length();in++){ 20 tp<<ss[in]; 21 } 22 tp>>name1; 23 for( in=0;in<=name1.length()-1;in++){ 24 if(name1[in]=='.'){ 25 break; 26 } 27 tp1<<name1[in]; 28 } 29 tp1>>name; 30 cout<<"class:"<<name<<endl; 31 fstream filestr(args[1],fstream::in|fstream::out); 32 string s="",t=""; 33 filestr>>s; 34 string j; 35 stringstream ss1; 36 if(s=="package"){ 37 filestr>>t; 38 int x=t.length(); 39 t[x-1]='\0'; 40 cout<<"package:"<<t<<endl; 41 ss1<<"java "<<t<<"."<<name; //java package_name.main_class_name 42 } 43 else{ 44 ss1<<"java "<<name; //java main_class_name 45 } 46 filestr.close(); 47 j=ss1.str(); 48 cout<<j<<endl; 49 system(&j[0]); 50 system("Pause"); 51 return 0; 52 }

 

把生成的两个EXE文件放在一个文件夹(比如F:\\myshell)里,然后再把这个文件夹添加到系统的PATH环境变量里,

然后打开Notepad++,点击运行菜单中的运行

输入exe的文件名,myjavac后面的两个参数是"$(CURRENT_DIRECTORY)"   "$(FULL_CURRENT_PATH)"

        myjava后面的两个参数是"$(FULL_CURRENT_PATH)"   "$(NAME_PART)"                     (参数之间用空格隔开)

然后点击保存,输入名称,选择快捷键(不选也可以),就可以把自己的命令添加到运行菜单了。

notepad++编译并运行java (自定义包)_第1张图片

 

还可以通过修改C++代码或是使用批处理把两个命令合并为一个命令。

 

 

 /------------------------------------------------------2015.6.27更新-----------------------------------------------------------------------------------/

  发现自己的程序无法应付多个java文件的编译。所以又改写了myjavac.cpp的代码

   //myjavac.cpp

1
#include <iostream> 2 #include <windows.h> 3 #include <string> 4 #include <sstream> 5 #include <fstream> 6 using namespace std; 7 8 int main(int argc,char* args[]) 9 { 10 string s1(args[1]); 11 string dir="dir "+s1+" /b >java_files.txt"; 12 cout<<dir<<endl; 13 system(&dir[0]); 14 string filenames[30]; 15 for(int i=0;i<=29;i++){ 16 filenames[i]=""; 17 } 18 fstream file("java_files.txt"); 19 int index=0; 20 while(file.eof()==false){ 21 file>>filenames[index]; 22 index++; 23 } 24 file.close(); 25 system("del java_files.txt"); 26 stringstream ss; 27 ss<<"javac -d "<<s1<<" "; 28 for(int in=0;in<=29;in++){ 29 if(filenames[in]!=""){ 30 string temp=filenames[in]; 31 if(temp.compare(temp.length()-5, temp.length()-1,string(".java"))==0){ 32 ss<<filenames[in]<<" "; 33 } 34 } 35 else{ 36 break; 37 } 38 } 39 string j; 40 j=ss.str(); 41 cout<<j<<endl; 42 system(&j[0]); 43 system("Pause"); 44 return 0; 45 }

  此时myjavac的参数就只需要  "$(CURRENT_DIRECTORY)"  了。

 

  至此就实现了

      javac  -d  directory_name  file_name1  file_name2  file_name3...

      java  package_name.main_class_name

  这两个命令。也就能实现绝大多数情况下的Java编译和运行了。

/--------------------------------------------------------------2015.7.2更新--------------------------------------------------------------------/

后天期末考试,这两天紧张复习中。。。压力山大

发现程序似乎依然有小错误,当文件名长度小于5的时候。。。有空再改

你可能感兴趣的:(notepad)