Я хотел бы иметь возможность управлять сканером из моего приложения AIR.Поскольку изначально это не поддерживается, я пытаюсь использовать класс NativeProcess для запуска файла JAR, который может запустить сканер.Код Java использует библиотеку JTwain для работы сканера.Приложение Java работает нормально, и приложение AIR может запускаться и взаимодействовать с приложением Java.Кажется, проблема в том, что всякий раз, когда я пытаюсь использовать функцию из JTwain (которая опирается на JTwain.dll), приложение умирает, ЕСЛИ ВОЗДУХ НАЧИНАЕТСЯ.
Я не уверен, есть ли какое-то ограничениессылки на DLL-файлы из нативного процесса или что.Я включил свой код ниже
Java-код -
while(true)
{
try {
System.out.println("Start");
text = in.readLine();
Source source = SourceManager.instance().getCurrentSource();
System.out.println("Java says: "+ text);
}
catch (IOException e)
{
System.err.println("Exception while reading the input. " + e);
}
catch (Exception e) {
System.out.println("Other exception occured: " + e.toString());
}
finally {
}
}
}
Воздушное приложение -
import mx.events.FlexEvent;
private var nativeProcess:NativeProcess;
private var npInfo:NativeProcessStartupInfo;
private var processBuffer:ByteArray;
private var bLength:int = 0;
protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
{
var arg:Vector.<String> = new Vector.<String>;
arg.push("-jar");
arg.push(File.applicationDirectory.resolvePath("Hello2.jar").nativePath);
processBuffer = new ByteArray;
npInfo = new NativeProcessStartupInfo;
npInfo.executable = new File("C:/Program Files/Java/jre6/bin/javaw.exe");
npInfo.arguments = arg;
nativeProcess = new NativeProcess;
nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onStandardOutputData);
nativeProcess.start(npInfo);
}
private function onStandardOutputData(e:ProgressEvent):void
{
tArea.text += nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable);
}
protected function button1_clickHandler(event:MouseEvent):void
{
tArea.text += 'AIR app: '+tInput.text + '\n';
nativeProcess.standardInput.writeMultiByte(tInput.text + "\n", 'utf-8');
tInput.text = '';
}
protected function windowedapplication1_closeHandler(event:Event):void
{
nativeProcess.closeInput();
}
]]>
</fx:Script>
<s:Button label="Send" x="221" y="11" click="button1_clickHandler(event)"/>
<s:TextInput id="tInput" x="10" y="10" width="203"/>
<s:TextArea id="tArea" x="10" width="282" height="88" top="40"/>
Я хотел бы получить некоторое объяснение того, почему это умирает,Я провел достаточно тестов, и я точно знаю, что строка, которая его убивает, - это SourceManager.instance (). GetCurrentSource ().Я буду рад любым предложениям.Спасибо.