常用的就是Eclipse,My Eclipse,idea这三种,My Eclipse相对于其他两种不是很常用
⑵ 如何用java调用c语言编译器实现在线编译c语
要在java中调用c语言的库,需要使用Java提供了JNI。
举例说明
在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.
现在分别从Java和C语言两部分说明:
1. Java 部分
首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:
public class HelloNative {
public native void sayHello();
}
编译这个类,生成class文件:
javac HelloWorld.java
利用javah生成需要的h文件
javah HelloNative
生成的 h文件大概如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。
2. C语言部分
根据上面生成的h文件编写相应的代码实现,建立一个 HelloNative.cpp用来实现显示Hello World的函数.如下:
#include <stdio.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}
代码编写完成之后,我们再用gcc编译成库文件,命令如下;
gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp
这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.
接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的 System.loadLibrary("HelloNative");
public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}
但是再编译后,运行的时候,问题又出现了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)
载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢?
用System.getProperty("java.library.path")查看,发现java.library.path中并不u存在当前的目录.主要有以下的几个解决办法:
1) 将生成的库复制到java.library.path有的路径中去,当然这样不是很好
2) 设置环境变量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,将当前的目录加入到LD_LIBRARY_PATH中
3) 设置java 的选项,将当前的目录加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
这样之后程序就能够成功的运行了.可以看见显示的"Hello World!"了
⑶ 如何用java实现一个文本编译器
JDK自带一个简单的Notepad,你可以研究一下他的源代码。
在%JAVA_HOME%\demo\jfc\Notepad 目录下
JDK自带一个稍复杂的Stylepad,你可以研究一下他的源代码。
在%JAVA_HOME%\demo\jfc\Stylepad目录下
⑷ java语言编译器是怎样编写的,源代码是什么
编译器
本身就是一个应用程序,编译器涉及到底层的一些操作,对执行要求比较高的地方使用汇编语言编写的,主要的还是用C语言来编写实现的,在Java的安装路径下的bin目录下有很多的*.exe可执行文件,像jar.exe、javac.exe、java.exe等等,Java编译器这东西它好像不是开源的,如果你对编译器的实现感兴趣的话,推荐你看一本《
编译原理
》这本书,这本书对你了解编译器的实现原理有很大的帮助的。
⑸ 用Java可以写C语言编译器吗
用java是可以写语言编译器的,用任何语言工具写都可以。 各语言开发工具间只有开发效率的差异,没有可行不可行的区别。
编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指令就是CPU的指令集,当然可以直接操作内存),当然,这个二进制文件需要符合操作系统的可执行文件的格式(PE格式或ELF格式)才能执行。
换个角度理解:
linux gcc实际上就是一个工具集合,包含编译器,汇编器,连接器等
编译器就是把c语言程序翻译为一种叫做目标文件的中间表示形式,然后交给汇编器,翻译为汇编程序,而汇编执行直接对应二进制机器码,链接之后就可以变成可执行文件了。
而用java实现的编译器完全可以代替gcc工具集合中的编译器,生成相同的目标文件的中间表示形式,在交给gcc汇编器,连接器等处理。
⑹ JAVA的编译器有哪些
JCreater 、JBuilder、eclipse、myeclipse、netbean这几个是主流,eclipse和myeclipse(eclipse的扩展功能更多)是主流中的主流
⑺ 初学java 用什么编译器
一 eclipse / myeclipse
当年学习java,最先接触到的就是 eclipse。喔了个噻,当时感觉eclipse好牛啊,有好多先进的功能:
1. 可以方便地进行包管理。可视化窗口,创建目录和文件都很方便,移动包,复制包等都可以方便的进行。
2.热键操作。复制保存啥的就不说了,代码提示这个功能还是很不错的,在写着写着,脑子突然短路的时候,可以通过快捷键把脑子快速带回来。
3.代码调试。有时候,写着写着代码,突然间就报错了,不知道哪里错了,咋整,这时候,如果使用编辑器的话,就可以使用 debug模式进行调试了,找出问题所在,解决问题。
4.一些代码管理等插件。在企业中肯定要用到代码同步工具,svn 或者 git , 在编辑器中会提供这样的插件,方便代码的管理。
二 idea
相比 eclipse 和 myeclipse ,idea 的基本功能差不多。
1. 包管理:也是有方便的包和资源管理。
2.热键:也是提供热键管理的,而且还很好用。
3.代码调试:debug模式用起来也是很舒服。
4.插件方面:也是支持一些插件的,如 热部署插件等。
三 比较
1. 操作:两个软件有不同的快捷键,虽然idea兼容部分eclipse快捷键,但是不建议这样做。
2.资源消耗:idea更能吃内存啊呦喂,电脑配置低的伤不起啊。eclipse要更柔和一点。
3.是否免费:eclipse 是免费的,myeclipse和idea 是要付费的呦。但是嘛,你懂得。
4.专业性:idea 应该是更专业的,有更高的代码更新机制和代码提示功能。但是 eclipse 涉及的范围更广,除了java 和可以编辑其他语言的项目。
四 建议
1. 如果电脑配置比较低,建议使用 eclipse ,并且使用较低版本的,这样,电脑不会太吃力。如果配置比较高,比如,16G内存,固态硬盘,那就使用idea吧。
2. 没有最好的编辑器,只有最适合自己的编辑器。任何一个编辑器用习惯了,都是很不错的。
希望对您有所帮助!~
⑻ 用java做文本编译器
给你个简单的记事本代码,自己看着修改吧!
package com.csk.notepad;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class MyNotepad implements ActionListener {
private JFrame frame = new JFrame("Notepad By ChenXiaoKang");
private JTextArea jta = new JTextArea();
private String result = "";
private boolean flag = true;
private File f;
private JButton jb = new JButton("开始");
private JTextField jtf = new JTextField(15);
private JTextField jt = new JTextField(15);
private JButton jbt = new JButton("替换为");
private JButton jba = new JButton("全部替换");
private Icon ic = new ImageIcon("D:\\java课堂笔记\\GUI\\11.gif");
private String value;
private int start = 0;
private JFrame jf = new JFrame("查找");
private JFrame jfc = new JFrame("替换");
@Override
public void actionPerformed(ActionEvent e) {
String comm = e.getActionCommand();
if ("新建".equals(comm)) {
if (!(frame.getTitle().equals("新记事本"))) {
if (!flag) {
write();
newNew();
} else {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
int returnVal = jfc.showDialog(null, "保存为");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
}
}
} else if (!(jta.getText().isEmpty())) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
int returnVal = jfc.showDialog(null, "保存为");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
newNew();
}
} else {
newNew();
}
} else if ("打开".equals(comm)) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
jfc.setDialogType(JFileChooser.OPEN_DIALOG);
int returnVal = jfc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
frame.setTitle(f.getName());
result = read();
flag = false;
value = result;
jta.setText(result);
}
} else if ("保存".equals(comm)) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
if (flag) {
int returnVal = jfc.showDialog(null, "保存为");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
}
} else {
write();
}
} else if ("另存".equals(comm)) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
int returnVal = jfc.showDialog(null, "另存");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
write();
}
} else if ("退出".equals(comm)) {
System.exit(0);
} else if ("撤销".equals(comm)) {
jta.setText(value);
} else if ("剪切".equals(comm)) {
value = jta.getText();
jta.cut();
} else if ("复制".equals(comm)) {
jta.();
} else if ("粘贴".equals(comm)) {
value = jta.getText();
jta.paste();
} else if ("删除".equals(comm)) {
value = jta.getText();
jta.replaceSelection(null);
} else if ("全选".equals(comm)) {
jta.selectAll();
} else if ("查找".equals(comm)) {
value = jta.getText();
jf.add(jtf, BorderLayout.CENTER);
jf.add(jb, BorderLayout.SOUTH);
jf.setLocation(300, 300);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
} else if ("替换".equals(comm)) {
value = jta.getText();
GridLayout gl = new GridLayout(3, 3);
JLabel jl1 = new JLabel("查找内容:");
JLabel jl2 = new JLabel("替换为:");
jfc.setLayout(gl);
jfc.add(jl1);
jfc.add(jtf);
jfc.add(jb);
jfc.add(jl2);
jfc.add(jt);
jfc.add(jbt);
JLabel jl3 = new JLabel();
JLabel jl4 = new JLabel();
jfc.add(jl3);
jfc.add(jl4);
jfc.add(jba);
jfc.setLocation(300, 300);
jfc.pack();
jfc.setVisible(true);
jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
} else if ("版本".equals(comm)) {
JDialog jd = new JDialog(frame, "关于对话框");
jd.setSize(200, 200);
JLabel l = new JLabel("哈哈哈哈哈哈哈哈哈哈呵呵呵呵呵呵呵呵呵呵呵呵呵");
jd.add(l, BorderLayout.CENTER);
jd.setLocation(100, 200);
jd.setSize(300, 300);
jd.setVisible(true);
// jd.pack();
jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
} else if ("开始".equals(comm) || "下一个".equals(comm)) {
String temp = jtf.getText();
int s = value.indexOf(temp, start);
if (value.indexOf(temp, start) != -1) {
jta.setSelectionStart(s);
jta.setSelectionEnd(s + temp.length());
jta.setSelectedTextColor(Color.GREEN);
start = s + 1;
jb.setText("下一个");
// value=value.substring(s+temp.length());//不能截取字串
} else {
JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic);
jf.dispose();
}
} else if ("替换为".equals(comm)) {
String temp = jtf.getText();
int s = value.indexOf(temp, start);
if (value.indexOf(temp, start) != -1) {
jta.setSelectionStart(s);
jta.setSelectionEnd(s + temp.length());
jta.setSelectedTextColor(Color.GREEN);
start = s + 1;
jta.replaceSelection(jt.getText());
} else {
JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic);
jf.dispose();
}
} else if ("全部替换".equals(comm)) {
String temp = jta.getText();
temp = temp.replaceAll(jtf.getText(), jt.getText());
jta.setText(temp);
}
}
public String read() {
String temp = "";
try {
FileInputStream fis = new FileInputStream(f.getAbsolutePath());
byte[] b = new byte[1024];
while (true) {
int num = fis.read(b);
if (num == -1)
break;
temp = temp + new String(b, 0, num);
}
fis.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return temp;
}
public void write() {
try {
FileOutputStream fos = new FileOutputStream(f);
fos.write(jta.getText().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void newNew() {
frame.dispose();
new MyNotepad();
flag = true;
}
public MyNotepad() {
JMenuBar jmb = new JMenuBar();
String[] menuLab = { "文件", "编辑", "帮助" };
String[][] menuItemLab = { { "新建", "打开", "保存", "另存", "退出" },
{ "撤销", "剪切", "复制", "粘贴", "删除", "全选", "查找", "替换" }, { "版本" } };
for (int i = 0; i < menuLab.length; i++) {
JMenu menu = new JMenu(menuLab[i]);
jmb.add(menu);
for (int j = 0; j < menuItemLab[i].length; j++) {
JMenuItem jmi = new JMenuItem(menuItemLab[i][j]);
menu.add(jmi);
jmi.addActionListener(this);
}
}
frame.setJMenuBar(jmb);
jta.setLineWrap(true);// 自动换行
JScrollPane jsp = new JScrollPane(jta);// 滚动窗口面板
frame.add(jsp);
jb.addActionListener(this);
jbt.addActionListener(this);
jba.addActionListener(this);
frame.setLocation(200, 50);
frame.setSize(620, 660);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MyNotepad();
}
}
⑼ java在线编译器实现
try{
Thread.sleep(1000);
}catch(InterruptedException e){
//扑捉发生在线程中的异常,当一个正在执行的线程被中断时就会出现这个异常,添加catch后当程序被双击停止时不会出现错误
e.printStackTrace();
}
lbClock.setText(getDate());
}
⑽ 用java做一个java的编译器
Javac编译器读取Java源代码,并将其编译成字节代码,说的直白一点就是把java语言翻译成计算机可以识别的二进制代码。
java的编译器有很多种,有sun公司的jdk,有oracle的jdk,还有其他一些公司的,多采用sun公司的jdk。
java同时需要集成开发环境,它集成了java的编译器,让我们不必通过命令行来编译java类文件,通过它我们可以快速的开发我们需要的程序。目前用的比较多的集成开发环境有eclipse和myeclipse,eclipse有很多具有针对性的版本来应对不同的开发,而myeclipse则是相对来说功能比较全面,当然也需要购买,个人建议myeclipse。