第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 Java 按鈕(Swing/GUI)上單擊運(yùn)行 python 代碼?

如何在 Java 按鈕(Swing/GUI)上單擊運(yùn)行 python 代碼?

呼喚遠(yuǎn)方 2023-04-19 17:00:30
我用 Python 創(chuàng)建了一個(gè)程序,它可以打開(kāi)網(wǎng)絡(luò)攝像頭并實(shí)時(shí)識(shí)別攝像頭畫(huà)面中的人臉。我覺(jué)得從我的 IDE 運(yùn)行 python 代碼看起來(lái)很粗糙。我想在用戶(hù)單擊我的 Java GUI 表單中的按鈕時(shí)執(zhí)行 python 代碼。提前致謝!阿什溫
查看完整描述

3 回答

?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊

一種骯臟的 hacky 方法是調(diào)用Runtime.exec("python command here")一個(gè)偵聽(tīng)器并將其附加到由此創(chuàng)建的進(jìn)程。本文解釋了與此技術(shù)相關(guān)的方法:https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html。一個(gè)粗略的例子如下:


button.setOnAction(event -> {

    Runtime runtime = Runtime.getRuntime();

    Process process = runtime.exec("python command");

    process.getOutputStream()  // add handling code here

});

但是,請(qǐng)考慮這是否是您真正想要做的事情。為什么不用 Python 創(chuàng)建用戶(hù)界面。流行的 GTK GUI 庫(kù)具有 Python 綁定(文檔位于https://python-gtk-3-tutorial.readthedocs.io/en/latest/)。


或者考慮用 Java 編寫(xiě)人臉識(shí)別組件。如果您完全從頭開(kāi)始編寫(xiě)它,這可能會(huì)很困難,但如果使用像 OpenCV 這樣的庫(kù),則可能有可用的 Java 綁定。


一般來(lái)說(shuō),如果不特別小心,跨語(yǔ)言交流是很困難的,而且很容易出錯(cuò),所以請(qǐng)仔細(xì)考慮您是否需要這個(gè)確切的設(shè)置。


查看完整回答
反對(duì) 回復(fù) 2023-04-19
?
蠱毒傳說(shuō)

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

我想你可以使用

????Runtime?rt?=?Runtime.getRuntime();
????????Process?pr?=?rt.exec(path?+?"XXX.py");

并等待py完成輸出JSON格式,最后使用java rading你要做的JSON數(shù)據(jù)處理。


查看完整回答
反對(duì) 回復(fù) 2023-04-19
?
桃花長(zhǎng)相依

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊

老實(shí)說(shuō),我猜上面給出的答案是正確的。只需在按鈕事件中使用另一個(gè)線程,這樣您的 Java 程序主線程就不必等到事情完成,并且可以防止 UI 凍結(jié)。


創(chuàng)建線程


public class MyRunnable implements Runnable {


           private String commandParameters = "";


           // Just Creating a Constructor 

           public MyRunnable(String cmd)

           {

                this.commandParameters = cmd;

           }


           public void run()

           {

             try

             {

               Runtime runtime = Runtime.getRuntime();

               // Custom command parameters can be passed through the constructor.

               Process process = runtime.exec("python " + commandParameters);

               process.getOutputStream();

             }

             catch(Exception e)

             {

                    // Some exception to be caught..

             }

           }   

}

在您的按鈕事件中執(zhí)行此操作


yourBtn.setOnAction(event -> {


   try{

     Thread thread = new Thread(new MyRunnable("command parameter string"));

     thread.start();

   }

   catch(Exception e)

   {

           // Some Expection..

   }


});

現(xiàn)在您的主線程不會(huì)凍結(jié)或等待命令執(zhí)行完成。希望這能解決問(wèn)題。如果你想將一些變量值傳遞給“python 命令”,只需在創(chuàng)建MyRunnable 類(lèi)時(shí)讓你成為一個(gè)構(gòu)造函數(shù),并將它作為參數(shù)傳遞給 MyRunnable 類(lèi)的構(gòu)造函數(shù)。


現(xiàn)在,當(dāng)您單擊該按鈕時(shí),這將運(yùn)行一個(gè)新線程。這不會(huì)干擾您的主 UI 線程。


查看完整回答
反對(duì) 回復(fù) 2023-04-19
  • 3 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)