settings.java
来自「google公司的用Java写的一个聊天软件的原代码」· Java 代码 · 共 354 行
JAVA
354 行
/*************************************************************************** * Copyright 2006-2008 by Christian Ihle * * kontakt@usikkert.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/package net.usikkert.kouchat.misc;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Properties;import java.util.logging.Level;import java.util.logging.Logger;import net.usikkert.kouchat.Constants;import net.usikkert.kouchat.event.SettingsListener;import net.usikkert.kouchat.util.Tools;public final class Settings{ private static final Logger LOG = Logger.getLogger( Settings.class.getName() ); private static final String FILENAME = Constants.APP_FOLDER + "kouchat.ini"; private static final Settings SETTINGS = new Settings(); private final NickDTO me; private final List<SettingsListener> listeners; private final ErrorHandler errorHandler; // The settings private int ownColor, sysColor; private boolean sound, logging, debug, nativeLnF; private String browser; private Settings() { int code = 10000000 + (int) ( Math.random() * 9999999 ); me = new NickDTO( "" + code, code ); me.setMe( true ); me.setLastIdle( System.currentTimeMillis() ); me.setLogonTime( System.currentTimeMillis() ); me.setOperatingSystem( System.getProperty( "os.name" ) ); me.setClient( Constants.APP_NAME + " v" + Constants.APP_VERSION + " " + System.getProperty( Constants.PROPERTY_CLIENT_UI ) ); listeners = new ArrayList<SettingsListener>(); errorHandler = ErrorHandler.getErrorHandler(); browser = ""; ownColor = -15987646; sysColor = -16759040; sound = true; nativeLnF = true; loadSettings(); } public static Settings getSettings() { return SETTINGS; } public void saveSettings() { FileWriter fileWriter = null; BufferedWriter buffWriter = null; File appFolder = new File( Constants.APP_FOLDER ); if ( !appFolder.exists() ) appFolder.mkdir(); try { fileWriter = new FileWriter( FILENAME ); buffWriter = new BufferedWriter( fileWriter ); buffWriter.write( "nick=" + me.getNick() ); buffWriter.newLine(); buffWriter.write( "owncolor=" + ownColor ); buffWriter.newLine(); buffWriter.write( "syscolor=" + sysColor ); buffWriter.newLine(); buffWriter.write( "logging=" + logging ); buffWriter.newLine(); buffWriter.write( "sound=" + sound ); buffWriter.newLine(); buffWriter.write( "debug=" + debug ); buffWriter.newLine(); // Properties does not support loading back slash, so replace with forward slash buffWriter.write( "browser=" + browser.replaceAll( "\\\\", "/" ) ); buffWriter.newLine(); buffWriter.write( "nativelnf=" + nativeLnF ); buffWriter.newLine(); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString() ); errorHandler.showError( "Settings could not be saved:\n " + e ); } finally { try { if ( buffWriter != null ) buffWriter.flush(); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString(), e ); } try { if ( fileWriter != null ) fileWriter.flush(); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString(), e ); } try { if ( buffWriter != null ) buffWriter.close(); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString(), e ); } try { if ( fileWriter != null ) fileWriter.close(); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString(), e ); } } } private void loadSettings() { FileInputStream fileStream = null; try { Properties fileContents = new Properties(); fileStream = new FileInputStream( FILENAME ); fileContents.load( fileStream ); String tmpNick = fileContents.getProperty( "nick" ); if ( tmpNick != null && Tools.isValidNick( tmpNick ) ) { me.setNick( tmpNick.trim() ); } try { ownColor = Integer.parseInt( fileContents.getProperty( "owncolor" ) ); } catch ( final NumberFormatException e ) { LOG.log( Level.WARNING, "Could not read setting for owncolor.." ); } try { sysColor = Integer.parseInt( fileContents.getProperty( "syscolor" ) ); } catch ( final NumberFormatException e ) { LOG.log( Level.WARNING, "Could not read setting for syscolor.." ); } logging = Boolean.valueOf( fileContents.getProperty( "logging" ) ); debug = Boolean.valueOf( fileContents.getProperty( "debug" ) ); browser = fileContents.getProperty( "browser" ); if ( fileContents.getProperty( "sound" ) != null ) sound = Boolean.valueOf( fileContents.getProperty( "sound" ) ); if ( fileContents.getProperty( "nativelnf" ) != null ) nativeLnF = Boolean.valueOf( fileContents.getProperty( "nativelnf" ) ); } catch ( final FileNotFoundException e ) { LOG.log( Level.WARNING, "Could not find " + FILENAME + ", using default settings." ); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString(), e ); } finally { try { if ( fileStream != null ) fileStream.close(); } catch ( final IOException e ) { LOG.log( Level.SEVERE, e.toString(), e ); } } } public NickDTO getMe() { return me; } public int getOwnColor() { return ownColor; } public void setOwnColor( final int ownColor ) { if ( this.ownColor != ownColor ) { this.ownColor = ownColor; fireSettingChanged( "ownColor" ); } } public int getSysColor() { return sysColor; } public void setSysColor( final int sysColor ) { if ( this.sysColor != sysColor ) { this.sysColor = sysColor; fireSettingChanged( "sysColor" ); } } public boolean isSound() { return sound; } public void setSound( final boolean sound ) { if ( this.sound != sound ) { this.sound = sound; fireSettingChanged( "sound" ); } } public boolean isLogging() { return logging; } public void setLogging( final boolean logging ) { if ( this.logging != logging ) { this.logging = logging; fireSettingChanged( "logging" ); } } public boolean isDebug() { return debug; } public void setDebug( final boolean debug ) { this.debug = debug; } public String getBrowser() { return browser; } public void setBrowser( final String browser ) { this.browser = browser; } public boolean isNativeLnF() { return nativeLnF; } public void setNativeLnF( final boolean nativeLnF ) { this.nativeLnF = nativeLnF; } private void fireSettingChanged( final String setting ) { for ( SettingsListener listener : listeners ) { listener.settingChanged( setting ); } } public void addSettingsListener( final SettingsListener listener ) { listeners.add( listener ); } public void removeSettingsListener( final SettingsListener listener ) { listeners.remove( listener ); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?