SC Tuan

錯誤訊息

IntelliJ 建立一個 Java 專案運行時出現錯誤:

Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java (0x104b814c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x106bb64e0). One of the two will be used. Which one is undefined.

本專案是單純 Java 。

解決方法

最上方的 Help 點開,選擇最下面的 Edit Custom Properties...IntelliJ 會詢問要不要建立 idea.properties 檔案,建立後,在裡面輸入

idea.no.launcher=true

然後重新啟動 IntelliJ 即可。

--

--

以下介紹初次加入多國的過程。

檔案聯繫

多國語言都是加在 src/main/resources 下面,我是在下面增加一個 package 叫做 i18n ,然後裡面再增加一個 New > Other... > General > File ,然後叫做 messages.properties

因為 MessageSource 需要透過 spring.messages.basename 來取得檔案,所以要在 application.properties 裡面增加 spring.messages.basename :

spring.messages.basename=i18n/messages

這樣他就知道要去哪裡找檔案了,也知道檔案的基本命名。

結論

  1. 你要在正確的路徑(src/main/resource)下建立檔案(i18n/messages.properties)
  2. 你要在適當的檔案 (application.properties) 裡面宣告檔案名稱(spring.messages.basename)

用法

在檔案裡面宣告:

import org.springframework.context.MessageSource;public class App {
// ...
@Autowired
private MessageSource messageSource;
// ...
}

然後呼叫

String string = messageSource.getMessage("hello.world", null, Locale.TRADITIONAL_CHINESE);

hello.world 是我在 messages.properties 裡面建立的 key。

第一個參數是 key ,映照到 messages.properties 裡面你建立的鍵值對。第二個參數是用在字串裡面的,就像是 String.format() 一樣,這裡我沒用到,所以輸入 null 。第三個參數是要用哪種語言。

結論

透過 MessageSource 來使用多國字串

--

--

看到有人這樣講,他的方法也蠻單純:

  • 每天的行程都有計畫
  • 今天做好明天的計畫
  • 用蕃茄鐘

第一個作法我認為很難,他只是寫出他幾點到幾點做什麼,實際上沒這麼容易吧?比方八點到十一點寫程式,但你可能在這個時候被打擾啊?所以這能算計畫嗎?

第二個我認同,但他沒有寫他做怎樣的計畫,難道又是幾點到幾點寫程式?如果是我,我會計劃明天要做哪些事項,然後盡可能地拆解成可以在一個蕃茄鐘裡面可以完成的。

第三個就是蕃茄鐘,原理也就是人類的集中力並不長,所以專注做二十五分鐘,然後休息五分鐘。但你可能會遇到一種狀況是你已經超過二十五分鐘了,但你一直延遲休息,這就是因為你拆解的任務不夠細。

蕃茄鐘的重點是你要足夠了解你的任務。你要先將任務拆解到足夠細,盡可能在一個番茄鐘裡面可以完成一個以上,這樣你到休息的時間段時,你才能安心的去休息。

然後,蕃茄鐘也避免你持續的工作直到耗盡。其實你晚上睡覺也是一樣,如果你是一直持續到你非常非常累才去睡,你很難有充分的休息,我甚至懷疑睡覺也是要先保持一個良好的狀態,如果你每天都是榨乾一切才去睡覺,你根本無法有充分的休息。

番茄鐘的效果就是避免你自我耗盡,讓你在長時間工作中鬆弛有度,你能夠透過簡短的充分休息延長你的效能。而這前提是你要充分拆解你的工作,要拆解成每一步都是很顯而易見的,這讓你充分了解你會遇到的困難,以及完成的條件,因為你拆解的夠詳細,你就會知道困難的地方在哪裡,你該做好準備;因為你要先了解任務怎樣才算是完成,你才知道要怎樣拆解,讓這些步驟連貫起來能夠帶來成果。

所以我認為結果就是番茄鐘,他讓你做好許多準備,他要求你先去思考清楚「完成」條件是什麼?透過精細的拆解先了解你會遇到的困難,然後每一個二十五分鐘要專注完成一個小進度,之後安心的休息一下。

因此理想上不應該有一個拆解後的任務會超過一個番茄鐘的長度,因為這樣的任務就是拆解的不夠細。

--

--

以下紀錄如何在 gradle 裡面增加一個 dependencies。過程盡可能簡短,詳細的說明請找其他的地方。

要建立一個 dependencies 就是你要確認一些像是版本之類的訊息,首先你要知道你要去哪裡找這些訊息。

尋找 library

MVNRepository 網站搜尋你的 library 名稱。他會要你驗證是不是機器人。

找到之後,你要選擇你要的版本,點擊 Fi …

--

--

STS4 閃退後遇到這個錯誤,不想重開電腦,想著應該可以刪除這個使用中的 port 吧?找到以下辦法。

查詢運行該 port 的 process

進入終端機,輸入

ps -aef | grep tomcat

我看到了兩個結果,挑了比較可疑的那個:

501 38961     1   0  5:01下午 ??        44:05.43 /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:58452 -javaagent:/Applications/SpringToolSuite4.app/Contents/Eclipse/configuration/org.eclipse.osgi/227/0/.cp/lib/javaagent-shaded.jar......

process_id 就是 38961。

刪除 process

呼叫以下指令:

kill -9 process_id

在我的情況是:

kill -9 38961

就可以了。

或者也可以

甚至是直接刪除掉 tomcat 的 process 就好:

pkill -9 -f tomcat

直接輸入這行指令,就不需要查詢 id 了。

--

--

看了一些書發現還真有不少特殊運算結果,這邊來寫一點。

Array

陣列居然可以做四則運算,結果如下:

[2] + [3] // "23"
[2] * [3] // 6
[2] - [3] // -1
[2] / [3] // 0.6666666666666666

可是個數超過一個就不行了:

[2, 3] + [3, 6] // "2,33,6"
[2, 3] * [3, 6] // NaN
[2, 3] - [3, 6] // NaN
[2, 3] / [3, 6] // NaN

其實理由很單純,在這邊會先把陣列轉成字串,透過呼叫陣列的 toString() 得到一個字串,然後再做運算。由於字串間的加法是把字串連接起來,所以會有以上的結果,而其他的會把字串轉換成數字,顯然 "2,3" 這樣的數字無法進行運算,所以會得到 NaN

Object

如果你有一個物件,如果你有定義 toString() 並且回傳的東西是可以計算的,那也可以做運算喔。

var obj = {
toString() {
return "24";
}
}

做點運算吧:

obj + 1 // "241"
obj - 1 // 23
obj * 2 // 48
obj / 2 // 12

道理也是一樣的。

Number 和 parseInt

將字串轉換成數字有兩種做法, Number("245")parseInt("245") ,但他們之間還是有差異的,前者只能轉換純數字的字串,後者則是可以取出字串中從首字符開始連續沒空白的數字:

Number("245")         // 245
Number("245fsdsaf") // NaN
parseInt("245") // 245
parseInt("245dsffsd") // 245
parseInt("dasd245") // NaN

所以要看你的需求去選擇要用哪一個。

先寫到這邊,有機會再繼續補充。

--

--

SC Tuan

SC Tuan

iOS developer(Obj-C & Swift) / Web developer (Java, Javascript, CSS,HTML)