IDEA進程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug
由于昨天要寫的文章沒有寫完,于是今天早上我四點半就“自然醒”了,心里面有事,睡覺也不安穩(wěn)。洗漱完畢后,我打開電腦,正襟危坐,擺出一副要干架的態(tài)勢,不能再拖了。
要寫的文章中涉及到一串代碼,關(guān)于 Undertow 的一個入門示例,貼出來大家看一下。
public class UndertowTest {
public static void main(final String[] args) {
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
}
}
Undertow 是大名鼎鼎的 Red Hat(紅帽子)公司開發(fā)的一款基于 NIO 的高性能 Web 服務(wù)器軟件,不需要單獨安裝軟件,只需要幾行代碼就可以在 Java 應(yīng)用程序中啟動一個 Web 服務(wù),就像上面那段代碼。
前提條件是你已經(jīng)在 pom.xml 文件中引入了 Undertow 的依賴。
<dependency> <groupId>io.undertow</groupId> <artifactId>undertow-core</artifactId> <version>2.0.28.Final</version> </dependency>
沒想到,代碼在 IDEA 中運行后,竟然非正常退出了!

沒有任何錯誤提示,真的是郁悶。主機名 localhost 沒有問題,端口 8080 也沒有被占用,但 main 方法在沒有任何外力的因素下直接結(jié)束了。在瀏覽器地址欄中輸入 http://localhost:8080 自然也無法顯示“Hello World”。
回看 Run 面板中的輸出信息,唯一讓我感到疑惑的就是下面這行:
進程已結(jié)束,退出代碼-1073741819 (0xC0000005)
正常來說,程序執(zhí)行的輸出結(jié)果如下所示:
進程已結(jié)束,退出代碼0
退出代碼是 0,表示程序正常結(jié)束;退出代碼是 1073741819,它代表什么意思呢?
肯定是非正常唄。我第一時間想到的原因是,會不會是我代碼寫錯了?于是查看了 Undertow 的官網(wǎng),一個單詞一個單詞的檢查,甚至上了 beyond compare 進行比較,也沒有找到任何可疑之處。
折騰得夠嗆,于是不得不上了谷歌大法:

換了各種關(guān)鍵詞,查閱了各種文章,沒有找到可行的解決辦法。谷歌無果,我想那就試試某度吧,結(jié)果搜到了游戲,天地良心啊。

搜索引擎靠不住,那就只能靠自己了。于是我寫下了這段代碼:
public class TestClose {
public static void main(String[] args) {
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
運行結(jié)果大吃一驚。我揉了好幾次眼睛,甚至上了倍清亮眼藥水,結(jié)果也是非正常退出,錯誤代碼和之前的 Undertow 一致。

搞什么嘛,這可是 Thread.sleep(10000000) 休眠大法啊,也能在一秒內(nèi)結(jié)束,那一定不是 Undertow 的代碼示例寫錯了,而是 IDEA 在作妖。
事到如今,我想起了被打入冷宮的 Eclipse。同樣的代碼,進程沒有立即結(jié)束掉。

Undertow 的代碼示例也沒有問題,程序沒有立即結(jié)束。

在瀏覽器中輸入 http://localhost:8080 也能正常訪問。

對比之后,問題就很確定了,出在 IDEA 身上,一定是它哪根神經(jīng)錯亂了。于是換了一下谷歌搜索的關(guān)鍵詞,結(jié)果如下所示。

果然也有同行遇到了類似的問題,但文章中提到的原因竟然是金山詞霸的劃詞翻譯,這有點太扯了吧?

雖然有點扯,但的確值得試一試,畢竟山窮水盡了啊,況且我的電腦上真的安裝了金山詞霸,并且是打開狀態(tài)。

那就退出試試唄,結(jié)果。。。。。。。。。。真的有用啊。

這次,進程沒有主動結(jié)束,這是什么神奇的操作???人生第一次開始懷疑科學(xué)了!
既然和金山詞霸有關(guān)系,那么我就腦洞打開了,是不是因為我裝了漢化插件的關(guān)系?于是我把 IDEA 的漢化插件禁用,并且在重啟之前打開了金山詞霸。

結(jié)果證明沒關(guān)系,進程主動結(jié)束了。

于是只好再次退出金山詞霸。沒想到,當我點擊 Run 的小圖標再次運行程序時,IDEA 竟然閃退了??磥硭鼈冎g的確有著不可告人的秘密,具體原因未知。
不管怎么說,這個莫名其妙的 bug 是解決了,有必要總結(jié)一波經(jīng)驗心得了,希望能夠給小伙伴們在開發(fā)中一些啟發(fā)。因為作為程序員,面對不會說話的計算機,有時候,真的會遇到一些難以名狀的錯誤,把我們折騰得夠嗆。
經(jīng)驗一:保持冷靜,切勿暴躁,心態(tài)失衡時容易捶鼠標,捶鍵盤,捶壞了,還得買新的。
經(jīng)驗二:先從自身代碼找原因,復(fù)制粘貼有時候也會出現(xiàn)偏差,這時候,最好就和源頭對比一下。如果肉眼發(fā)現(xiàn)不了,上比較工具,靠譜。
經(jīng)驗三:問谷歌,不要問某度。這年頭,經(jīng)常聽到一些小伙伴們抱怨說,公司不允許上網(wǎng),遇到問題時真的無從下手,我只能說這樣的公司真的是閉關(guān)鎖國啊。
經(jīng)驗四:換個環(huán)境試一試。同樣的代碼,環(huán)境不同,運行后的解決真有可能不同。IDEA 中出錯,放 Eclipse 中試試;Windows 下出錯,放 Linux 下試試;自己的環(huán)境有問題,放同事的環(huán)境下試試。
經(jīng)驗五:搜索的時候換一下關(guān)鍵詞,真的是“柳暗花明又一村”啊。
經(jīng)驗六:重復(fù)以上。
到此這篇關(guān)于IDEA進程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug的文章就介紹到這了,更多相關(guān)IDEA 進程已結(jié)束退出代碼-1073741819 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析Java實現(xiàn)設(shè)計模式六大原則之里氏替換原則
里氏替換原則是用來幫助我們在繼承關(guān)系中進行父子類的設(shè)計。它闡述了有關(guān)繼承的一些原則,也就是什么時候應(yīng)該使用繼承,什么時候不應(yīng)該使用繼承,以及其中蘊含的原理。它是繼承復(fù)用的基礎(chǔ),反映了基類與子類之間的關(guān)系,是對開閉原則的補充,對實現(xiàn)抽象化具體步驟的規(guī)范2021-06-06
Spring boot整合Mybatis實現(xiàn)級聯(lián)一對多CRUD操作的完整步驟
這篇文章主要給大家介紹了關(guān)于Spring boot整合Mybatis實現(xiàn)級聯(lián)一對多CRUD操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Java數(shù)據(jù)庫操作庫DButils類的使用方法與實例詳解
這篇文章主要介紹了JDBC數(shù)據(jù)庫操作庫DButils類的使用方法詳解,需要的朋友可以參考下2020-02-02
Java使用 Stream 流和 Lambda 組裝復(fù)雜父子樹形結(jié)構(gòu)
在最近的開發(fā)中,遇到了兩個類似的需求:都是基于 Stream 的父子樹形結(jié)構(gòu)操作,返回 List 集合對象給前端,下面給大家分享Java使用 Stream 流和 Lambda 組裝復(fù)雜父子樹形結(jié)構(gòu)的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧2024-07-07
Java利用Jackson序列化實現(xiàn)數(shù)據(jù)脫敏詳解
在項目中有些敏感信息不能直接展示,比如客戶手機號、身份證、車牌號等信息,展示時均需要進行數(shù)據(jù)脫敏,防止泄露客戶隱私。本文將利用Jackson序列化實現(xiàn)數(shù)據(jù)脫敏,需要的可以參考一下2023-03-03

