나는 병렬 포트를 읽고 쓰려고하는데, 나는 C로 쓰고 읽을 것을 구현했다. 이제이 코드를 자바 GUI 애플리케이션으로 가져오고 싶다. 자바 프로젝트에 C .so 파일을 포함 할 수 있었고 Java 솔루션의 main() 메소드에서 직접 함수를 호출 할 때 제대로 작동합니다.자바 스윙 GUI에서 네이티브 C 코드 호출
버튼을 눌렀을 때 기본 함수를 호출하려고했지만 작동하지 않으면 응용 프로그램이 충돌합니다. 응용 프로그램을 루트 권한으로 실행하고 있으며 루트 권한은 변경하고 병렬 포트 값을 읽는 데 필요합니다.
어떻게 네이티브 함수를 호출하는 것을 시도하고있다 :private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
int portNR=Integer.parseInt(jTextField1.getText());
int value=Integer.parseInt(jTextField2.getText());
ParalellComanderApp.setPort(portNR,value);
}
catch (Exception e)
{
System.err.println(e.getMessage());
}
}
원주민 기능 C에서 :
JNIEXPORT void JNICALL Java_paralellcomander_ParalellComanderApp_setPort
(JNIEnv *env, jobject obj, jint port, jint value)
{
outb(value,MAIN_PORT+port);
printf("Setting port %d to value %d\n",port,value);
}
충돌 메시지 : 긴 게시물에 대한
A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f00adaf9833, pid=6516, tid=139640785835776
#
# JRE version: 6.0_23-b23
# Java VM: OpenJDK 64-Bit Server VM (20.0-b11 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea6 1.11pre
# Distribution: Ubuntu oneiric (development branch), package 6b23~pre10-0ubuntu5
# Problematic frame:
# C [libAccessParalel.so+0x833] inb+0x17
#
# An error report file with more information is saved as:
# /home/bari/NetBeansProjects/ParalellComander/dist/hs_err_pid6516.log
#
# If you would like to submit a bug report, please include
# instructions how to reproduce the bug and visit:
# https://bugs.launchpad.net/ubuntu/+source/openjdk-6/
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
죄송합니다. 아무도 도와 줄 수 있습니까?
이 필요한 중 스레드에서 네이티브 C를 호출 할 괜찮아요 ... 문제가 JNA로 변경하여 해결되지 않습니다하지만 JNA는, JNI에 비해 작업 할 고통의 약간 덜 생각 에 부름 받았다. JNA 또는 JNI를 사용하는 경우, 어떤 오류가 표시되는지와 같은 세부 사항을 숨기고있는 것 같습니다. 스윙 앱인가요? –
'OnButtonDown() '이란 무엇입니까? J2SE에서는 클래스도 메소드도 아닙니다. * "응용 프로그램이 충돌합니다"* 예외/오류 출력은 무엇입니까? (우리는 초능력도 아니고 컴퓨터 앞에 앉아있는 척하지도 않습니다.) –
BTW - 첫 번째 2 개의 댓글에서 네 가지 질문 ('?'로 끝나는 것)을 받았습니다. 귀하의 질문은 무엇인가? –