我正在使用WatchService来监视目录中的更改,特别是在目录中创建新文件.以下是我的代码 -
package watcher;
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.OVERFLOW;
import java.io.*;
public class Watch {
public static void main(String[] args) throws IOException {
Path dir = Paths.get("c:\\mk\\");
WatchService service = FileSystems.getDefault().newWatchService();
WatchKey key = dir.register(service, ENTRY_CREATE);
System.out.println("Watching directory: "+dir.toString());
for(;;){
WatchKey key1;
try {
key1 = service.take();
} catch (InterruptedException x) {
break;
}
for (WatchEvent<?> event: key1.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
if (kind == OVERFLOW) {
continue;
}
WatchEvent<Path> ev = (WatchEvent<Path>)event;
Path filename = …Run Code Online (Sandbox Code Playgroud) 我想在Java中将字节转换为int.我想假设字节是无符号字节.假设是
byte a = (byte)0xFF;
int r = (some operation on byte a);
Run Code Online (Sandbox Code Playgroud)
r应该是255而不是十进制的-1.
然后我想从3个字节创建int值.假设是
byte b1 = (byte)0x0F;
byte b2 = (byte)0xFF;
byte b3 = (byte)0xFF;
int r = (some operation in bytes b1, b2 and b3);
Run Code Online (Sandbox Code Playgroud)
然后r应该是0x000FFFFF.字节b1将位于较高的第3位置,字节b3将位于较低的第1位置的int值.我也将B1的范围从0x00为0x0F和其他字节将是0x00对0xFF假定的字节无符号性质.如果字节b1大于0x0F,我将只提取最低4位.简而言之,我想从3个字节中提取int,但只使用20个3字节.(来自b2和b3的总共16位,以及来自b1的4位最低位).int r必须是正数,因为我们从3个字节创建并假设字节的无符号性质.
在我的系统中,我安装了64位Java 1.7:C:\ Program Files\Java\jdk1.7.0_40
和
我安装了32位Java 1.7:C:\ Program Files(x86)\ Java\jdk1.7.0_02.
当我java -version在CMD中发出命令时,它显示我:
C:\Users\Meraman>java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我想将java版本更改为32位.
我试过了:
1)从path变量中删除了64位安装的路径,但仍然CMD显示相同的java -version命令输出.
2)我在path变量中只指定了32位安装路径,但CMD仍然显示相同的java -version命令输出.
3)然后添加JAVA_HOME带有值的变量C:\Program Files (x86)\Java\jdk1.7.0_02,但仍然CMD显示相同的输出.
4)在Java控制面板 - > Java-> Java运行时环境设置 - >用户中,我已完成向导查找32位java并仅启用该功能,禁用64位安装,但仍然CMD显示相同的输出.
请帮助我,我想在不卸载64位的情况下将Java更改为32位.
更多信息:
每次更改路径或Java控制面板后,我都重新启动了CMD.
我有path和JAVA_HOME仅作为系统变量,没有任何这样的用户变量.
编辑
我删除了路径变量中的所有java路径设置,删除了JAVA_HOME变量,仍然CMD显示64位.
C:\Users\Meraman>echo %PATH%
C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\Python33\;C:\Program Files (
x86)\AMD APP\bin\x86_64;C:\Program Files …Run Code Online (Sandbox Code Playgroud) 我将mp3转换为wav的代码是:
package audio1;
import java.io.File;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
public class NewClass {
public static void main(String [] args){
try{
AudioFileFormat inputFileFormat = AudioSystem.getAudioFileFormat(new File("c:\\1.mp3"));
AudioInputStream ais = AudioSystem.getAudioInputStream(new File("c:\\1.mp3"));
AudioFormat audioFormat = ais.getFormat();
System.out.println("File Format Type: "+inputFileFormat.getType());
System.out.println("File Format String: "+inputFileFormat.toString());
System.out.println("File lenght: "+inputFileFormat.getByteLength());
System.out.println("Frame length: "+inputFileFormat.getFrameLength());
System.out.println("Channels: "+audioFormat.getChannels());
System.out.println("Encoding: "+audioFormat.getEncoding());
System.out.println("Frame Rate: "+audioFormat.getFrameRate());
System.out.println("Frame Size: "+audioFormat.getFrameSize());
System.out.println("Sample Rate: "+audioFormat.getSampleRate());
System.out.println("Sample size (bits): "+audioFormat.getSampleSizeInBits());
System.out.println("Big endian: "+audioFormat.isBigEndian());
System.out.println("Audio Format String: "+audioFormat.toString());
AudioInputStream encodedASI = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, …Run Code Online (Sandbox Code Playgroud) 我想用 Java 模拟 TCP。
为此,我有多个线程,例如每个 TCP 连接的发送方和接收方线程。
我的问题是,我想暂停(如 Thread.sleep())线程几微秒的时间间隔。这样我就可以模拟流量控制,发送者线程在发送下一个数据包之前会阻塞几微秒,同时 CPU 可以被接收和数据处理线程使用。但是我找不到任何执行 sleep() 或 wait() 以获得微秒或纳秒分辨率的方法。如何以微秒或纳秒分辨率在 Java 中阻塞(暂停)线程?
我找到了 System.nanoTime() 方法,但没有在指定的微秒或纳秒内阻塞线程的方法。如果有任何这样的方法,请告诉我。System.nanoTime() 仅给出以纳秒为单位的相对时间间隔。
我可以使用 System.nanoTime() 在使用忙循环的线程中执行纳秒延迟,但这会浪费 CPU,而 CPU 本来可以用于接收数据线程或处理线程。
另一个令人困惑的问题:
通过网上冲浪,我发现 Thread.sleep() 或 wait() 方法在 Windows 系统中阻塞至少指定的毫秒或 10 毫秒的倍数,以较小者为准,没有线程中断。但是当我运行示例示例时,我发现了非常不同的结果。就像线程的睡眠时间少于指定的毫秒。有些线程给了我 100 微秒的睡眠时间。时间测量有误差吗?System.nanoTime() 不是那么准确吗?请参阅下面的示例,其中我得到了非常不同的结果。线程优先级也没有给出预测结果。
public class MyClass {
public static void main(String args []){
Runnable r = new Runnable() {
public void run() {
long s = System.nanoTime();
//Thread.yield(); // Try for yield, need to check - in how much time high priority thread …Run Code Online (Sandbox Code Playgroud) 我在我的Web应用程序中使用Tomcat JDBC池作为MySQL数据库连接池.JDBC池在应用程序的context.xml中声明为资源(不是在全局级别).我正在Eclipse IDE中开发这个Web应用程序.因此,每当我对代码进行更改时,eclipse都会使Tomcat服务器重新加载上下文.
但问题是,当重新加载上下文时,tomcat会创建具有新连接的JDBC池而不释放旧池.在对代码进行了几次更改后,tomcat最终耗尽了MySQL服务器的最大连接限制,并且tomcat开始在上下文重新加载时显示"Too many connections"错误.
我的context.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/myDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
username="root"
password="admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/myDB?allowMultiQueries=true"
defaultAutoCommit="false"
initialSize="20"
maxActive="50"
maxIdle="30"
minIdle="15"
maxWait="5000"
testOnBorrow="true"
testWhileIdle="true"
validationQuery="SELECT 1"
timeBetweenEvictionRunsMillis="35000"
minEvictableIdleTimeMillis="55000"
removeAbandoned="true"
removeAbandonedTimeout="3600"
logAbandoned="true"
validationInterval="35000"
/>
</Context>
Run Code Online (Sandbox Code Playgroud)
我的web.xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>MyApp</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>MyApp DB Connection</description>
<res-ref-name>jdbc/myDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<context-param>
<param-name>data-source-lookup-name</param-name>
<param-value>java:comp/env/jdbc/myDB</param-value>
</context-param>
<listener>
<listener-class>com.project.listeners.AppListener</listener-class>
</listener>
</web-app>
Run Code Online (Sandbox Code Playgroud)
App Listener就像:
package com.project.listeners;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration; …Run Code Online (Sandbox Code Playgroud) 是设置的最佳尺寸JFrame采用setPreferredSize()认为是坏?
如果不好,有什么方法可以将JFrame窗口大小更改为我需要的尺寸.
我知道按照我需要的最终JFrame维度来铺设组件.但是,如果我使用快捷方式在调用setPreferredSize()之前使用调用更改首选大小pack()更改最终JFrame大小是不是很糟糕?如果是这样的话?
例如,我有样本表格:

显示时不设置首选大小.
现在我可以在调用setPreferredSize()之前通过调用调整表单大小pack().

通过调用显示: setPreferredSize(new Dimension(500, 300));
在铺设时,我可以设置组件尺寸具有类似的效果.但是只需调用就可以设置帧大小的缺点setPreferredSize().
我可以考虑将首选大小设置为在显示后用鼠标手动调整显示窗口的大小.不是吗?
码:
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField fullNameTextField = new JTextField();
private JTextField emailIDTextField = new JTextField();
private JTextArea addressTextArea = new JTextArea(); …Run Code Online (Sandbox Code Playgroud) 假设我有:
Class A{
int a;
}
A obj = new A();
Run Code Online (Sandbox Code Playgroud)
然后obj的大小是多少?它是否与int大小相同,就像在C中一样?
如果我能弄清楚这一点,那么我可以在不使用数据库的情况下将大型HashMap保留在RAM中.
提前致谢.
编辑
朋友们,
其实我有:
HashMap<Long, List<T>> map;
Run Code Online (Sandbox Code Playgroud)
和
class T{
private int a;
private int b;
private int c;
// constructor, getters and setters
}
Run Code Online (Sandbox Code Playgroud)
并且地图的大小可能会增长到10000000个密钥,对于每个密钥,我将有100-1000的大小列表.
整个地图会留在堆里吗?
编辑2
当我用大约70000个密钥加载地图时,当我将其序列化为文件时,文件大约为18 MB,那么我的地图堆中是18 MB吗?
如果用户输入“ 239.4.4.4”之类的IP地址,如何在Linux C中使用任何功能确定该IP地址是多播的?
我有:
struct X {
int i, j;
};
struct XArray {
X xs[3];
};
X xs1[3] { {1, 2}, {3, 4}, {5, 6} };
XArray xs2 { {1, 2}, {3, 4}, {5, 6} };
Run Code Online (Sandbox Code Playgroud)
在xs1初始化罚款,初始化xs2会产生编译错误:
error: too many initializers for 'XArray'
XArray xs2 { {1, 2}, {3, 4}, {5, 6} };
^
Run Code Online (Sandbox Code Playgroud)
怎么了?为什么我不能初始化?
我遇到的情况是,我将根据价值改变密钥HashMap.我HashMap是:
HashMap<Key, Path>
Run Code Online (Sandbox Code Playgroud)
最初我正在Key为每个目录创建s Path并将这些条目放入其中HashMap.当进行处理,我将采取Path基于Key从HashMap并处理它们.在某些情况下,我将重新计算Key了一些Path,想取代旧Key与新的Key针对Path.我希望为唯一路径保留唯一的密钥,并使用其中一个更新HashMap中的Entry.所以我想执行HashMap的反向更新Key.什么是最好的技术?
提前致谢.