当前位置:编程学习 > JAVA >>

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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,