JFrame窗口通过jni调用vc++代码,为什么不能直接调用呢?
//各位高手 小弟遇到的问题比较的简单 就是我点击一个button为什么就调用不了呢如果我不用button的事件调的话就可以调用 Vc++中的代码,请问为什么啊
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.text.StyledEditorKit.ForegroundAction;
public class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("jnitest"); // jnitest 为动态链接的名称,可以更改。
}
public static void main(String[] args) {
JButton action = new JButton("一个Swing按钮");
JFrame frame = new JFrame("JNI 测试");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.getContentPane().add(action);
frame.setVisible(true);;
action.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
}
public static void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("testvc");
new HelloWorld().displayHelloWorld();
}
} --------------------编程问答-------------------- 为什么我这样就可以直接的调用?
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.text.StyledEditorKit.ForegroundAction;
public class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("jnitest"); // jnitest 为动态链接的名称,可以更改。
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
请高人指点啊!
--------------------编程问答-------------------- 测试按下按钮正常调用 --------------------编程问答-------------------- 按钮是绝对正常的! --------------------编程问答-------------------- import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.text.StyledEditorKit.ForegroundAction;
public class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("jnitest"); // jnitest 为动态链接的名称,可以更改。
}
public static void main(String[] args) {
JButton action = new JButton("一个Swing按钮");
JFrame frame = new JFrame("JNI 测试");
frame.setSize(240, 280);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.getContentPane().add(action);
// frame.setVisible(true);
for(int i=0;i<5;i++){
new HelloWorld().displayHelloWorld();
}
}
}
这个代码可以执行,是因为我// frame.setVisible(true); 是不是jni和JFrame有冲突,我怀疑,帮我看看啊! --------------------编程问答-------------------- SwingUI和Windows UI机制不一样,的确会有冲突。
WindowUI是基于当前线程派发事件的,Eclipse的SWT和WindowUI兼容。
Swing是双线程的,SwingUI的用户线程只能处理事件,不能管理和接收事件,和WindowUI不兼容。 --------------------编程问答-------------------- taolei大哥:你之前也帮这个帖子解决了问题
http://topic.csdn.net/u/20090923/11/72cd498f-96e8-430b-ade1-a4d81f4e4a0a.html 他这个也是和我一样的情况怎么就可以调用呢 请你帮我解决这个问题啊 --------------------编程问答-------------------- 我2楼的帖子的意思是使用和顶楼相同的代码调用我自己写的jni函数是正常执行的 --------------------编程问答-------------------- 非常荣幸问题已经解决了
我的c++代码 少了一行代码
UI thread没有刷新界面
cout.flush(); //程序运行的结果就是出现“ Hello World! ”。
如果谁愿意交流jni 请加 565824237
--------------------编程问答-------------------- 这个没法解决
用MessageBox弹吧
补充:Java , Java SE