亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? urlgrabbermainform.pas

?? JNI(java本地接口)之delphi版
?? PAS
字號:
unit URLGrabberMainForm;

interface

uses
  {$IFDEF LINUX}
  SysUtils, Classes, QGraphics, QForms, QDialogs, QStdCtrls, QExtCtrls,
  QControls, QComCtrls,
  JNI;
  {$ENDIF}

  {$IFDEF WIN32}
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls,
  JNI;
  {$ENDIF}

type
  TURLThread = class(TThread)
  public
    URL: string;
    HTML: string;
    JavaVM: TJavaVM;
    constructor Create(const JavaVM: TJavaVM; const URL: string);
    procedure Execute; override;
    procedure UpdateUI;
  end;

  TURLGrabberForm = class(TForm)
    mmoHTML: TMemo;
    btnLoadVM: TButton;
    lblURLs: TLabel;
    lstURLs: TComboBox;
    btnCallClassMethod: TButton;
    btnCallMethodFromThread: TButton;
    btnCallObjectMethod: TButton;
    btnCreateMultipleThreads: TButton;
    barStatus: TStatusBar;
    procedure FormDestroy(Sender: TObject);
    procedure btnCallClassMethodClick(Sender: TObject);
    procedure btnLoadVMClick(Sender: TObject);
    procedure btnCallObjectMethodClick(Sender: TObject);
    procedure btnCallMethodFromThreadClick(Sender: TObject);
    procedure btnCreateMultipleThreadsClick(Sender: TObject);
  private
    FJavaVM: TJavaVM;
    FJNIEnv: TJNIEnv;
    procedure UpdateStatusBar(const Text: string; ClearMemo: Boolean = False);
  end;

var
  URLGrabberForm: TURLGrabberForm;

implementation

{$IFDEF LINUX}
{$R *.xfm}
{$ENDIF}
{$IFDEF WIN32}
{$R *.dfm}
{$ENDIF}

function CreateJavaObject(const JNIEnv: TJNIEnv; const ClassName: string; var AClass: JClass): JObject;
var
  Mid: JMethodID;
begin
  Result := nil;

    // Find the class
  try
    AClass := JNIEnv.FindClass(PChar(ClassName));
    if AClass = nil then
      Exit;

      // Get its default constructor
    Mid := JNIEnv.GetMethodID(AClass, '<init>', '()V');
    if Mid = nil then
      Exit;

      // Create the object
    Result := JNIEnv.NewObjectA(AClass, Mid, nil);

  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;
end;

procedure TURLGrabberForm.FormDestroy(Sender: TObject);
begin
  FJNIEnv.Free;
  FJavaVM.Free;
end;

procedure TURLGrabberForm.btnLoadVMClick(Sender: TObject);
var
  Errcode: Integer;
  VM_args11: JDK1_1InitArgs;
  VM_args: JavaVMInitArgs;
  Classpath: string;
  Options: array [0..10] of JavaVMOption;
begin
  UpdateStatusBar('Loading VM...', True);

  try
      // Create the wrapper for the VM
    FJavaVM := TJavaVM.Create;

      // Get default settings (so we can display them)
    Errcode := JNI_GetDefaultJavaVMInitArgs(@VM_args11);
    if Errcode < 0 then
    begin
      ShowMessageFmt('JNI_GetDefaultJavaVMInitArgs failed, error code = %d', [Errcode]);
      Exit;
    end;

      // Display the classpath (this is just for reference)
    Classpath := VM_args11.classpath;
    mmoHTML.Lines.Add('CLASSPATH=' + Classpath);

      // Set up the options for the VM
    FillChar(Options, SizeOf(Options), #0);
    Options[0].optionString := '-Djava.class.path=.';
    VM_args.version := JNI_VERSION_1_2;
    VM_args.options := @Options;
    VM_args.nOptions := 1;

      // Load the VM
    Errcode := FJavaVM.LoadVM(VM_args);
    if Errcode < 0 then
    begin
        // Loading the VM more than once will cause this error
      if Errcode = JNI_EEXIST then
        MessageDlg('Java VM has already been loaded. Only one VM can be loaded.', mtError, [mbOK], 0)
      else
        ShowMessageFmt('Error creating JavaVM, code = %d', [Errcode]);
      Exit;
    end;

      // Create the Env class
    FJNIEnv := TJNIEnv.Create(FJavaVM.Env);

      // Enable UI buttons
    btnCallClassMethod.Enabled := True;
    btnCallObjectMethod.Enabled := True;
    btnCallMethodFromThread.Enabled := True;
    btnCreateMultipleThreads.Enabled := True;

  except
    on E: Exception do
    begin
      ShowMessage('Error: ' + E.Message);
      UpdateStatusBar('Load VM failed.');
      Exit;
    end;
  end;

  UpdateStatusBar('Ready.');
end;

procedure TURLGrabberForm.btnCallClassMethodClick(Sender: TObject);
var
  Cls: JClass;
  Mid: JMethodID;
  HTML: string;
  URL: string;
  JStr: JString;
begin
  UpdateStatusBar('Calling class method...', True);

  try
      // Get the URL from the UI
    URL := lstURLs.Text;

      // Find PageGrabber class
    Cls := FJNIEnv.FindClass('PageGrabber');
    if Cls = nil then
    begin
      ShowMessage('Can''t find class: PageGrabber');
      Exit;
    end;

      // Locate static method 'FetchS' in class
    Mid := FJNIEnv.GetStaticMethodID(Cls, 'FetchS', '(Ljava/lang/String;)Ljava/lang/String;');
    if Mid = nil then
    begin
      ShowMessage('Can''t find method: FetchS');
      Exit;
    end;

      // Call the static method
    JStr := FJNIEnv.CallStaticObjectMethod(Cls, Mid, [URL]);

      // Convert the returned JString to a Delphi string
    HTML := FJNIEnv.JStringToString(JStr);

      // Display the HTML
    mmoHTML.Lines.Add(HTML);

  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;

  UpdateStatusBar('Ready.');
end;

procedure TURLGrabberForm.btnCallObjectMethodClick(Sender: TObject);
var
  Cls: JClass;
  Mid: JMethodID;
  PageGrabber: JObject;
  JStr: JString;
  URL, HTML: string;
begin
  UpdateStatusBar('Calling object method...', True);

  try
      // Get the URL from the UI
    URL := lstURLs.Text;

      // Construct PageGrabber object
    PageGrabber := CreateJavaObject(FJNIEnv, 'PageGrabber', Cls);
    if PageGrabber = nil then
    begin
      ShowMessage('Can''t create PageGrabber object');
      Exit;
    end;

      // Locate the 'Fetch' method
    Mid := FJNIEnv.GetMethodID(Cls, 'Fetch', '(Ljava/lang/String;)Ljava/lang/String;');
    if Mid = nil then
    begin
      ShowMessage('Can''t find method: Fetch');
      Exit;
    end;

      // Call the method
    JStr := FJNIEnv.CallObjectMethod(PageGrabber, Mid, [URL]);

      // Convert the returned JString to a Delphi string
    HTML := FJNIEnv.JStringToString(JStr);

      // Display the HTML
    mmoHTML.Lines.Add(HTML);

  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;

  UpdateStatusBar('Ready.');
end;

procedure TURLGrabberForm.btnCallMethodFromThreadClick(Sender: TObject);
var
  URLThread: TURLThread;
  URL: string;
begin
  mmoHTML.Clear;
  Application.ProcessMessages;
  URL := lstURLs.Text;
  URLThread := TURLThread.Create(FJavaVM, URL);
  URLThread.Resume;
end;

procedure TURLGrabberForm.btnCreateMultipleThreadsClick(Sender: TObject);
var
  URLThread: TURLThread;
  I: Integer;
  URL: string;
begin
  UpdateStatusBar('Creating threads...', True);

    // Create a thread for each URL in the list
  for I := 0 to lstURLs.Items.Count - 1 do
  begin
    URL := lstURLs.Items[I];
    URLThread := TURLThread.Create(FJavaVM, URL);
    URLThread.Resume;
  end;

  UpdateStatusBar('Ready.');
end;

procedure TURLGrabberForm.UpdateStatusBar(const Text: string; ClearMemo: Boolean);
begin
  if ClearMemo then
    mmoHTML.Lines.Clear;
  barStatus.Panels[0].Text := Text;
  Application.ProcessMessages;
end;

//****************************************************************************
// TURLThread
//****************************************************************************

constructor TURLThread.Create(const JavaVM: TJavaVM; const URL: string);
begin
  inherited Create(True);
  Self.URL := URL;
  Self.JavaVM := JavaVM;
  HTML := '';
end;

procedure TURLThread.UpdateUI;
begin
  with URLGrabberForm.mmoHTML.Lines do
  begin
    Add(StringOfChar('*', 80));
    Add(URL);
    Add(StringOfChar('*', 80));
    Add(HTML);
  end;
end;

procedure TURLThread.Execute;
var
  Cls: JClass;
  Mid: JMethodID;
  PageGrabber: JObject;
  RetVal: JString;
  Env: PJNIEnv;
  JNIEnv: TJNIEnv;
begin

  try
      // Attach this thread to the running JVM
    JavaVM.JavaVM^.AttachCurrentThread(JavaVM.JavaVM, @Env, nil);

      // Create the TJNIEnv wrapper class from the environment just retrieved
    JNIEnv := TJNIEnv.Create(Env);

      // Create an instance of the PageGrabber Java object
    PageGrabber := CreateJavaObject(JNIEnv, 'PageGrabber', Cls);

      // Locate the method we wish to call
    Mid := JNIEnv.GetMethodID(Cls, 'Fetch', '(Ljava/lang/String;)Ljava/lang/String;');
    if Mid = nil then
    begin
      ShowMessage('Can''t find method: Fetch');
      Exit;
    end;

      // Call the method
    RetVal := JNIEnv.CallObjectMethod(PageGrabber, Mid, [URL]);

      // Convert the JString to a Delphi string
    HTML := JNIEnv.JStringToString(RetVal);

      // This will display the HTML in a "safe" manner
    Synchronize(UpdateUI);

      // Release the reference to this thread (important!)
    JavaVM.JavaVM^.DetachCurrentThread(JavaVM.JavaVM);

  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍偷拍亚洲激情| 久久综合久久鬼色中文字| 国产精品色在线| 成人黄色a**站在线观看| 亚洲国产高清aⅴ视频| www.激情成人| 亚洲一区二区三区四区在线 | 奇米精品一区二区三区在线观看 | 欧美一区二区三区啪啪| 麻豆91免费观看| 久久久久久亚洲综合影院红桃| 国产精品一二三四五| 国产精品色在线观看| 日本电影欧美片| 蜜臀av国产精品久久久久| 久久嫩草精品久久久久| av不卡在线播放| 午夜影视日本亚洲欧洲精品| 亚洲自拍偷拍av| 麻豆精品在线看| 国产精品午夜电影| 欧美四级电影在线观看| 韩日精品视频一区| 亚洲欧美一区二区三区极速播放| 制服.丝袜.亚洲.另类.中文 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 免费欧美在线视频| 精品入口麻豆88视频| 久久精品亚洲一区二区三区浴池| 北条麻妃国产九九精品视频| 一区二区三区高清在线| 精品国产91洋老外米糕| 色综合天天做天天爱| 久久精品国产免费看久久精品| 国产精品乱子久久久久| 日韩一区二区三| 91视频在线看| 国产精品一区二区男女羞羞无遮挡 | 国产精品不卡一区| 日韩免费在线观看| 欧美亚洲一区二区三区四区| 国产一区二区三区久久悠悠色av | 午夜精品久久久久久不卡8050| 久久免费视频色| 欧美欧美欧美欧美| 91老师片黄在线观看| 国内一区二区视频| 日韩中文字幕亚洲一区二区va在线| 中文字幕欧美国产| 久久品道一品道久久精品| 91.com在线观看| 色综合欧美在线视频区| 国产成人精品免费| 精品一区二区日韩| 日韩国产一区二| 亚洲风情在线资源站| 国产精品每日更新在线播放网址| 精品理论电影在线观看| 欧美极品美女视频| 久久综合色综合88| 日韩欧美国产精品| 欧美一级日韩一级| 91.com视频| 欧美二区三区的天堂| 欧美自拍偷拍午夜视频| 97久久精品人人澡人人爽| 成人一区二区视频| 国产成人aaa| 国产高清不卡二三区| 国产尤物一区二区| 久久国产综合精品| 久久99精品久久久久久久久久久久| 婷婷六月综合网| 亚洲.国产.中文慕字在线| 亚洲第一精品在线| 亚洲成人免费av| 午夜精品在线视频一区| 亚洲成人综合在线| 日韩av在线发布| 天天色综合天天| 蜜臀99久久精品久久久久久软件| 肉色丝袜一区二区| 无码av中文一区二区三区桃花岛| 性做久久久久久久免费看| 午夜精彩视频在线观看不卡| 亚洲国产精品久久久男人的天堂 | 日韩福利电影在线观看| 天堂va蜜桃一区二区三区漫画版| 一区二区三区四区不卡在线| 亚洲午夜激情网页| 免费人成在线不卡| 国内精品久久久久影院薰衣草| 国产一区二区主播在线| 懂色av一区二区三区免费观看| av一区二区不卡| 欧美性一二三区| 日韩欧美久久一区| 国产欧美一区二区三区在线老狼| 国产精品福利影院| 亚洲综合免费观看高清完整版在线 | 国产精品无码永久免费888| 日韩理论片网站| 午夜影视日本亚洲欧洲精品| 免费一级片91| 本田岬高潮一区二区三区| 欧美亚洲国产bt| 精品国内片67194| 亚洲欧洲日产国产综合网| 亚洲无人区一区| 精品一区二区三区在线播放| 国产成人aaa| 欧美日韩一区 二区 三区 久久精品| 欧美一卡二卡三卡| 国产欧美日韩精品在线| 亚洲国产一区二区三区青草影视 | 午夜精品久久久久久| 看国产成人h片视频| 丰满放荡岳乱妇91ww| 欧美性xxxxx极品少妇| 精品国产乱码久久久久久老虎 | 欧美videos大乳护士334| 日本一区二区三区久久久久久久久不 | 精品不卡在线视频| 亚洲最新在线观看| 黄网站免费久久| 在线观看日韩精品| 日本一区二区免费在线| 日韩不卡手机在线v区| 国产成人欧美日韩在线电影| 欧美精品在线一区二区| 国产精品久久久久久久久免费丝袜 | 日韩精品一区二| 亚洲精品自拍动漫在线| 国产酒店精品激情| 91精品国产欧美一区二区成人 | 国产一区二区三区视频在线播放| 色综合中文字幕国产| 日韩精品中文字幕一区二区三区| 亚洲免费av在线| 懂色av一区二区三区免费观看| 日韩一区二区免费电影| 亚洲综合另类小说| 99久久婷婷国产综合精品电影 | 日韩福利视频网| 一本到不卡免费一区二区| 久久亚洲一区二区三区四区| 亚洲一级电影视频| av不卡免费在线观看| 国产日韩成人精品| 精品无码三级在线观看视频| 欧美久久久久中文字幕| 一区二区高清在线| 91猫先生在线| 国产精品久久久久久久久久久免费看 | 精品免费一区二区三区| 日韩av一级片| 欧美精品乱码久久久久久按摩| 一区二区三区国产豹纹内裤在线| 99久久久久久| 亚洲欧美在线视频观看| 99视频精品免费视频| 中文字幕av不卡| 成人午夜免费视频| 国产精品色眯眯| av一本久道久久综合久久鬼色| 久久久电影一区二区三区| 国产精品一区专区| 国产亚洲精品资源在线26u| 国产一区二区三区美女| 久久精品一区二区三区不卡牛牛| 激情五月婷婷综合| 久久日一线二线三线suv| 激情综合网最新| 国产偷国产偷亚洲高清人白洁 | 97久久超碰国产精品| 国产精品久久久久久久久果冻传媒 | 26uuu久久天堂性欧美| 国内精品国产三级国产a久久| 久久综合九色综合欧美98| 国产一区二区h| 国产精品电影院| 欧美伊人久久大香线蕉综合69| 婷婷综合在线观看| 欧美一区二区三区电影| 国产在线精品一区二区不卡了| 久久久久国产精品麻豆ai换脸| 高清国产一区二区| 日韩理论片网站| 91精选在线观看| 国产精品一区二区黑丝| 日韩伦理免费电影| 欧美日韩大陆一区二区| 久久99热99| 欧美激情一区在线| 欧美色图在线观看| 精品在线视频一区| 亚洲精品国产成人久久av盗摄| 538prom精品视频线放| 国产成人av电影在线观看| 伊人夜夜躁av伊人久久|