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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從類加載器加載的 jar 中獲取系統(tǒng)控制臺?

如何從類加載器加載的 jar 中獲取系統(tǒng)控制臺?

吃雞游戲 2023-07-28 15:49:28
我正在運行一個外部 jar 插件,如下所示:  Class<?> pluginClass = pluginLoader.loadClass(".......");       Method main = pluginClass.getMethod("main", String[].class);  main.invoke(null, new Object[] { new String[0] }); 效果很好?,F(xiàn)在需要將插件控制臺消息保存到字符串中  ByteArrayOutputStream baos = new ByteArrayOutputStream();  PrintStream ps = new PrintStream(baos); // how to indicate System.out coming from JAR plugin   System.setOut(ps);  // how to connect ps with plugin only 但這段代碼將所有控制臺消息保存到字符串中。我不需要所有的應用程序消息。如何將僅插件消息......來自此加載的 jar 的消息重定向到字符串中?
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

你不能做你所要求的。該進程中只有一個標準輸出流,它與插件代碼和您的代碼共享。

您可以將插件代碼作為單獨的進程運行并捕獲輸出流。您可以使用“java.home”系統(tǒng)屬性查找啟動進程的 JRE 的位置,并使用它形成命令行來啟動插件 jar。

查看完整回答
反對 回復 2023-07-28
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

System.out 是每個進程的,每個類加載器不可能有不同的流。如果您迫切需要讓系統(tǒng)從插件中退出,有兩種選擇: 1. 如果您有權訪問插件的代碼,則將輸出流傳遞給您的插件,并使插件使用此流。2. 將插件作為外部進程運行。這樣您就可以重定向其輸出。另一種選擇:如果您可以區(qū)分插件輸出,您可以實現(xiàn)自己的路由輸出流并將其設置為系統(tǒng)輸出。



查看完整回答
反對 回復 2023-07-28
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

我做了這個解決方法:


public class CustomPrintStream extends PrintStream {

    private String prefix;


    public CustomPrintStream(String prefix, OutputStream out) {

        super(out);

        this.prefix = prefix;

    }


    @Override

    public void println(String s) {

        if(s.startsWith(prefix))

            super.println(s);

        else {

            System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

            System.out.println(s);

            System.setOut(this);

        }

    }

}

這使您可以向每個主程序的 System.out.printlns 添加前綴,以便它們正常執(zhí)行。沒有前綴的(來自您的插件)直接進入定義的輸出流(在我的示例中為文件輸出流)


它的使用方式如下:


System.setOut(new CustomPrintStream("test", new FileOutputStream("C:\\out.txt"))); //Of course you can also use ByteArrayOutputStream, as you did before

System.out.println("test 1"); //this goes into the standard outstream

System.out.println("2"); //and this goes into the fileoutputstream

System.out.println("test 3");

也許這會對你有幫助:)


編輯:我將其切換,以便帶有前綴的字符串進入正常的輸出


查看完整回答
反對 回復 2023-07-28
  • 3 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號