我自己在使用Mac的時候,通常都是很久才重開機(大約兩三個禮拜)
繼續閱讀 [Mac] 中文注音選字框跑不出來?(How to solve the unpop zhuyin frame?)
我自己在使用Mac的時候,通常都是很久才重開機(大約兩三個禮拜)
繼續閱讀 [Mac] 中文注音選字框跑不出來?(How to solve the unpop zhuyin frame?)
開啟 Safari 看到功能列
點開任何一項功能(在此我以修改 “打開網址” 的快速鍵為例)
要做的功能是將
如此一來單手就能進行了!!!
不然 cmd+L 真的太遠了 (手掌沒有那麼長啊!)
運用的功能就是 Mac 系統自己內建的快速鍵修改系統囉
然後就會到下圖(已新增完的樣子)的地方
找到 Safari 按下 “+”:輸入 “打開網址⋯”
那個刪節號超難打!
打 “…”(英輸入>) 和 “···”(中文全形輸入option+>,再按”下”選擇”間隔號”)都不行
只能用中文輸入法 Shift+option+b 來打出刪節號,然後取一個複製下來貼上
os. 其實直接複製 “打開網址⋯” 就好了XD
再來右邊有個”加入快速鍵”的按鈕,就依個人喜好自由決定囉
這兩行 Apple script
set volSettings to get volume settings set volume output volume ((output volume of volSettings) + 7)
是讓 Mac 的系統音量提高一格
同理,要讓它降一格就改成 -7 就行了
這支 Demo 是在 java 中執行上述的兩行 Apple script
完整 Code:
class AppleScriptTesting{ public static void main(String[] args){ Runtime runtime = Runtime.getRuntime(); String applescriptCommand = "set volSettings to get volume settings\n" + "set volume output volume ((output volume of volSettings) + 7)\n"; String[] script = { "osascript", "-e", applescriptCommand }; try{ Process process = runtime.exec(script); }catch(Exception e){ e.printStackTrace(); } } }
參考:
Java AppleScript: How to run a multi-line Applescript command from a Java program: https://alvinalexander.com/blog/post/java/how-run-multi-multiple-line-applescript-java-program
使用前:
使用後:
一開始我是找到這篇:
https://alvinalexander.com/apple/mac/java-mac-native-look/Putting_JMenuBar_on_Mac_men.shtml
把下面這行加入到程式碼裡:
System.setProperty("apple.laf.useScreenMenuBar", "true");
發現無效!
然後又看到別篇有人說要在main function的很早就要放 System.setProperty 這行了
我把它移到 main 的最上面了,還是不行!
後來是這篇成功了:
https://stackoverflow.com/questions/1654531/jmenubar-at-the-top-in-macosx
原來是我加入 JMenuBar 和原來的不一樣
要使用 setJMenuBar 的方式來加入選單列才可以用
System.setProperty("apple.laf.useScreenMenuBar", "true");
放到 Mac OS X的原生選單列上
我原來加入選單列的方式是:
Container contentPage = getContentPane(); contentPage.add(menubar, BorderLayout.NORTH);
有時候就是很懶,不想開瀏覽器然後再點我的最愛,才能連到youtube
就算在 Mac 上已經有神器 Alfred,只要用快速鍵(我的快速鍵是option+空白鍵)開 Alfred
然後用自訂的 keyword 來啟動 app store 都抓得到的 youtube app
不過還是很懶(扭~~)
我會想要設定快速鍵來啟動 Youtube App,是因為我想要在背景聽 youtube 的音樂
不想要他放在我的 safari 的分頁裡,也不想讓他放在我桌面的任何地方
所以就可以 cmd+shift+’,換完別首歌後,再 cmd+h 讓他隱藏
反正就是懶人專用,讓 Automator 來幫我們做事吧
分成兩個部分
到這裡就可以存檔了!
開啟”系統偏好設定”(System Preference),切換到”鍵盤”裡面的”快速鍵”中的”服務”
找到”一般”裡面,你剛剛做好的服務所取的名字,替他加入一個快速鍵
然後不用關機就直接成立囉,可以直接用用看,如果沒反應
那可能是你設定的快速鍵有衝突到別的功能,換換別的快速鍵試試看吧
ps. 同理可以設定多個快速鍵,來快速啟動某些非常常用的 App 哦
我是先接觸 Android Studio 開發一些簡單的 App
後來想把 Java 底子打穩
才轉用 Eclipse 練習 Java 專案開發的
但是在剛轉換兩個 IDE 時,最讓我適應不良的地方就是
Eclipse 沒有像是 Android Studio 有自動提示程式碼的功能拉!!
像我這種還是練習中的新手,對各種 library、class 都還很不熟
一沒有提示就很難進行開發
所以就來記錄一下,怎麼樣讓 Eclipse 也有自動提示的功能
主要是參考這篇文章:電腦茶包|讓你的Eclipse更好用
不需要額外加裝套件,不過會需要多用一些電腦資源
也就是會有一點Lag
不過!!!為了自動提示,這點不方便不算什麼!!
也就是讓他判斷到這些字元,就觸發自動提示的功能
Java 程式端可以呼叫終端機來執行 apple script
靠的是 runtime.exec(args); 這行,來執行 args 的參數們
而實際執行的指令是
osascript -e 'display notification "Take a break" with title "Time up!!!" sound name ""' //可直接在終端機執行
我是放在 timer 倒數完結後(timeOut Override method),引發一個系統通知:
Runtime runtime = Runtime.getRuntime(); String[] args = { "osascript", "-e", "display notification \"Take a break\" with title \"Time's Up!!!\" sound name \"\"" }; try { Process process = runtime.exec(args); } catch (IOException ioError) { ioError.printStackTrace(); }
references:
https://alvinalexander.com/blog/post/java/how-run-execute-applescript-java-mac
import java.awt.AWTException; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.MalformedURLException; import java.net.URL; public class MenuBarIconTest { public static void main(String[] args) throws MalformedURLException { TrayIcon trayIcon = null; if (SystemTray.isSupported()) { // get the SystemTray instance SystemTray tray = SystemTray.getSystemTray(); // load an image Image image = Toolkit.getDefaultToolkit().getImage(new URL("http://cdn1.iconfinder.com/data/icons/Hypic_Icon_Pack_by_shlyapnikova/16/forum_16.png")); // create a action listener to listen for default action executed on the tray icon ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("action"); // execute default action of the application // ... } }; // create a popup menu PopupMenu popup = new PopupMenu(); // create menu item for the default action MenuItem defaultItem = new MenuItem("Do the action"); defaultItem.addActionListener(listener); popup.add(defaultItem); /// ... add other items // construct a TrayIcon trayIcon = new TrayIcon(image, "Tray Demo", popup); // set the TrayIcon properties trayIcon.addActionListener(listener); // ... // add the tray image try { tray.add(trayIcon); } catch (AWTException e) { System.err.println(e); } // ... } else { // disable tray option in your application or // perform other actions //... } // ... // some time later // the application state has changed - update the image if (trayIcon != null) { //trayIcon.setImage(updatedImage); } } }
reference:
https://stackoverflow.com/questions/13481504/creating-an-nsstatusitem-menubar-app-in-java
除了class檔們之外,還要製作一個純文字檔: manifest.mf (副檔名也可以是txt)
裡面內容為:(主要是要指定我們的起始MainClass是哪一個檔案)
Main-Class: HelloWorld // 注意: 1. Main-Class寫完後,要往下空兩行 // 2. Main-Class的冒號後面記得要加一個空白
(假設我們的起始class檔為 HelloWorld.class的話,完成MainClass設定後,存檔為 manifest.mf)
再來打開終端機,輸入
$ jar cvfm MyJar.jar manifest.mf HelloWorld.class HelloWorld$1.class // cvfm 的順序,會影響到後面接的參數順序 如果有很多個 class 檔也可以寫成 $ jar cvfm MyJar.jar manifest.mf *.class
就成功打包成為 MyJar.jar 檔
可以利用現成的程式來打包: jar2app
從名字就可以推斷出,就是要將 jar 轉為 app 檔
這支程式是以終端機指令來進行包裝
安裝方式:
$ git clone https://github.com/Jorl17/jar2app $ cd jar2app $ chmod +x install.sh uninstall.sh $ sudo ./install.sh
安裝完後,
將終端機目錄切換到 Jar 檔的所在目錄
$ jar2app MyJar.jar -i icon.icns
( icns 檔為 Mac App 的 icon 樣子,需事先準備好)
隨即就產生 MyJar.app 的 Mac App 囉
假設我們想要把程式java檔和編譯過的class檔分開在不同資料夾下
project資料夾底下放著 src 和 classes 兩個資料夾
src: 放java檔(原始碼),目前裡面有兩個檔案:Main.java, Console.java
classes: 放class檔(編譯後),目前裡面為空
開啟terminal,將目錄切換到project資料夾,輸入
javac -verbose -sourcepath src -d classes src/Main.java
-verbose:可以看到編譯的過程
-sourcepath:之後接的參數src,就是我們存放java檔的資料夾
-d:之後接的參數classes,就是我們想要放編譯後的class檔的資料夾(可以把d想成destination或directory)
最後接的參數就是我們想要編譯的檔案,放在src資料夾底下的Main.java檔
也可以再多下一個參數
-cp/ -classpath:之後接的參數,在這個情況是classes資料夾,也就是如果整個專案中,在classes裡,有些檔案沒有更改,就不會重新再編譯一次