Mactype入れたらWindowsが生まれ変わった
何が言いたいかと言うと「フォントレンダリングを改善したらやる気100倍になった」ということだ。
EclipseのフォントにConsolasを使っているのだが、Consolasは日本語に対応していない。
だから、日本語の表示にはMSゴシックが使われてしまうのだ。
MSゴシックを見ると皆さん気持ちが悪くなるだろう。
何とかできないかと探しているとMactypeなるものに出会った。
導入はインストールするだけ。それだけ。
Before
After
Firefoxを使っているひとは「Firefox で Mactype が効かない時の対処法」を参考に設定してほしい。 ついでにVLゴシックというフォントに変えることをおすすめする。
JavaFXでException in Application start methodって言われて困った話
結論から言うとコンパイルのし忘れという初歩のミスをやらかしてた
JavaFXで作ったものをインポートして利用しようとしたところ
こんな感じに怒られた
Exception in Application start method
java.lang.reflect.InvocationTargetException
~~中略~~
Caused by: javafx.fxml.LoadException:
/C:/Users/h/o/g/e/fxml/StartGUI.fxml:13
fxmlがない?
パスを間違えているのかとフルパスを指定しても変わらない
ちなみにエラーの箇所はこんな感じ(一部伏字)
実にありふれた文
BorderPane root = FXMLLoader.load( getClass( ).getResource( "/**/fxml/StartGUI.fxml" ) );
エラーの下の方をよく読むと、コントローラーが見つからない?と言っている
Caused by: java.lang.ClassNotFoundException: hoge.controller.StartGUIController
パスも間違ってないのになぜだと思いきや
Controllerのコンパイルを忘れている
コピってきたからclassファイルもあるし、修正後のコンパイルに気づかなかった
通りでStackOverflowにも回答がないわけです
初歩的なミスが一番怖い
エラー全文
Exception in Application start method java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Lau ncherImpl.java:363) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImp l.java:303) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherIm pl.java:875) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147( LauncherImpl.java:157) at com.sun.javafx.application.LauncherImpl$$Lambda$48/501263526.run(Unkn own Source) at java.lang.Thread.run(Thread.java:745) Caused by: javafx.fxml.LoadException: /C:/Users/**/**/**/**/fxml/StartGUI.fxml:13 at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2595) at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:104) at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java: 918) at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FX MLLoader.java:967) at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:21 6) at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.ja va:740) at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2701) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2521) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2435) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3208) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3169) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3142) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3118) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3098) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3091) at **.fx.StartSet.start(StartSet.java:31) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153 (LauncherImpl.java:821) at com.sun.javafx.application.LauncherImpl$$Lambda$51/934820170.run(Unkn own Source) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Platfor mImpl.java:323) at com.sun.javafx.application.PlatformImpl$$Lambda$44/661672156.run(Unkn own Source) at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl. java:292) at com.sun.javafx.application.PlatformImpl$$Lambda$47/355644776.run(Unkn own Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformI mpl.java:291) at com.sun.javafx.application.PlatformImpl$$Lambda$45/128893786.run(Unkn own Source) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatch er.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.ja va:102) at com.sun.glass.ui.win.WinApplication$$Lambda$37/1349277854.run(Unknown Source) ... 1 more Caused by: java.lang.ClassNotFoundException: **.controller.StartGUIController at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java: 916) ... 27 more Exception running application **.fx.StartSet
EclipseでJavaFXのライブラリを除去したらエラーがたくさん出た
以下の記事を参考に設定を変更して見事解決
EclipseでJavaFXを使おうとするとアクセス制限とでる問題の解決方法
環境設定>Java>コンパイラー>エラー警告>「使用すべきでない制限されたAPI」の「禁止された参照(アクセス・ルール)」を「エラー」から「無視」に変更
テキストファイルの重複要素を削除するクラスを書いてみた
引数1に入力元、引数2に出力先のパスを指定する
HashSetにそのままaddすると順序が保持されないなんて初耳だった
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.StandardOpenOption; import java.util.HashSet; import java.util.LinkedHashSet; class Distinct{ public static void main( String...args ){ if( args.length != 2 ){ System.out.println( "argument error" ); System.out.println( "argument1 : readfilepath , argument2 : writefilepath" ); return; } if( args[ 0 ].equals( args[ 1 ] ) ){ return; } File readfile = new File( args[ 0 ] ); File newfile = new File( args[ 1 ] ); try(BufferedReader br = Files.newBufferedReader( readfile.toPath( ) , StandardCharsets.UTF_8 ); BufferedWriter bw = Files.newBufferedWriter( newfile.toPath( ) , StandardCharsets.UTF_8 , StandardOpenOption.WRITE , StandardOpenOption.CREATE_NEW ); ){ HashSet< String > distinct = new LinkedHashSet< String >( 5000 ); for( String line; ( line = br.readLine( ) ) != null; ){ distinct.add( line ); } for( String line : distinct ){ bw.write( line + "\n" ); } }catch( IOException e ){ e.printStackTrace( ); } } }
parseTable.jsとかいう神ライブラリ
parseTable.js - convert HTML table to array of objects · GitHub
最近テーブルをパースするのがだるくてなんかいい方法ないかなと探し回っていたところぴったりのライブラリを見つけた
console.log(JSON.stringify(parseTable(document.querySelector("table")).reverse(),null," "));
で出力すれば1行でテーブルをJSONに変換できる
あとはファイルに書き込んでjavaでゴニョゴニョすると
factoryメソッドを少し書き換えればいい感じになる
function factory(headings) { return function(row) { return arrayify(row.cells).reduce(function(prev, curr, i) { // 変更部分 セルの中のhrefからURLを取得できるように変更 if( curr.childElementCount != 0 ){ prev[headings[i]] = [ { "name" : curr.getElementsByTagName("a")[0].innerText , "link" : curr.getElementsByTagName("a")[0].href } ]; }else{ // 変更前 prev[headings[i]] = curr.innerText; } return prev; }, {}); } }
JDBCでテーブル一覧を取得
try(Connection conn = DriverManager.getConnection(url, user, password); ResultSet rs = conn.getMetaData().getTables(null, null, "%", null); ){ final StringBuilder sb = new StringBuilder( ); while( rs.next( ) ){ sb.append( rs.getString( 3 ) +"<br>" ); } System.out.println( sb.toString( ) ); }
JDBCでファイルからデータを読み込んでテーブルに挿入
File file = new File( ABSOLUTE_FILEPATH ); try( BufferedReader br = Files.newBufferedReader( Paths.get( file.getAbsolutePath( ) ) , StandardCharsets.UTF_8 ) ){ for( String line; ( line = br.readLine( ) ) != null; ){ stmt.executeUpdate( "insert ignore into TABLENAME (CULUMNNAME) values ('"+ line +"')" ); } }catch( IOException e ){ e.printStackTrace(); }