好吧,我测试了TreeMap,但它没有考虑字符串比较中的IgnoreCase.我需要按字典顺序排序并忽略大小写.还有其他方法吗?
谢谢,这是有效的(TreeMap(Comparator c)).但是,我有另一个问题:
public final Comparator<Object> STR_IGN_CASE_COMP = new Comparator<Object>() {
public int compare(Object h1, Object h2) {
String s1 = h1.getId();
String s2 = h2.getId();
return s1.compareToIgnoreCase(s2);
}
}; //STR_IGN_CASE_COMP
Run Code Online (Sandbox Code Playgroud)
如何将比较器广泛化以适应不同的对象?假设所有人都有getId()方法.
谢谢,马丁
我有一个工作的JNLP应用程序,我需要分发给各种非技术最终用户.
如果用户的计算机安装了最新的JVM,一切都很好.他们只需双击我发送的JNLP文件,Java Web Start完成剩下的工作.
现在我想分发一些有或没有JVM的东西,例如一个.exe自动下载兼容JVM的文件(如果不存在),然后调用javaws.exe下载.jar文件并启动应用程序.
Launch4J是我找到的最接近的匹配,但它无法启动程序javaws.exe.唯一的选择是java和javaw
我想要的产品可以:
.exe不需要预先安装JVM 的自包含文件.jnlp如果需要,解析文件并确定要下载的正确JVM(我知道Java Web Start可以在必要时下载JVM,但我想避免必须下载两个,第一个用于引导Java Web Start,第二个用于运行应用程序,可能需要特定但不同的JVM.).exe,但我不希望第二次提示确认他们信任.jar来自同一来源并使用相同证书签名的文件.)我假设这需要自动下载程序在启动JWS之前安装证书.).jar与JVM同时在后台下载应用程序资源(例如文件).这将要求在安装JVM之前运行缓存,因此缓存必须以本机代码实现,DownloadService然后使用JNI 与缓存接口.这样的产品是否存在?我怀疑它没有,但它值得一试.
更新我发现这篇文章有一些相关问题的解决方案,虽然它是专为离线安装而设计的,我主要关心的是在线安装.
是否有一个外观和感觉无关对准组件的方式(例如JLabel)水平与文本的JCheckBox?
我试图使用来自的值UIDefaults来预测文本相对于左上角的位置JCheckBox.我找到了一个组合,可以为Metal,Windows,Motif和Aqua Look-and-Feels提供合适的结果:

但不是在Nimbus:

是否有某种实用方法能够可靠地为所有外观中的文本提供X,Y偏移量?
代码(注意:为避免任何布局副作用,我在此测试中使用了null布局):
import java.awt.Insets;
import javax.swing.JApplet;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.border.Border;
public class AlignCheckBoxText extends JApplet {
public AlignCheckBoxText() {
setLayout(null);
checkBox = new JCheckBox("Hello, World!");
label = new JLabel("Hello, World!");
add(checkBox);
add(label);
}
@Override
protected void validateTree() {
checkBox.setLocation(0, 0);
checkBox.setSize(checkBox.getPreferredSize());
int labelX = UIManager.getIcon("CheckBox.icon").getIconWidth();
Insets cbInsets = UIManager.getInsets("CheckBox.margin");
if (cbInsets != null) labelX += cbInsets.left + cbInsets.right;
Border cbBorder = UIManager.getBorder("CheckBox.border"); …Run Code Online (Sandbox Code Playgroud) 我有关于使用Java进行音乐转录的项目,事情是,我创建了一个记录声音并将其保存到WAV文件的applet,播放器应该只播放他/她想要转录的片段,之后我被卡住了在这一点上,我必须从保存的WAV文件中获取信息并使用此信息创建一个MIDI文件,并在创建MIDI文件后,我必须为它生成一个乐谱(乐谱),所有这些必须完成在Java中.
我到处寻找关于如何完成这些工作的明确解释,但我没有找到任何直接的东西:(因为我是Java的新手,我希望有人能帮我解决这个问题,我在编程时遇到的问题是:
在对正在读取的数据执行分段后,我也尝试过快速傅立叶变换,但我认为这绝对是在错误的方向:(
如果有人可以帮助我完成上面指定的主题,以及如何只用Java编程,那将非常感激:)
顺便说一句,该项目是:
玩家在钢琴上弹奏音符>>记录他的演奏>>玩家获得他演奏的分数.
有没有人知道是否有好的软件可以执行从(波形或mp3或其他已知格式)到MIDI的转换?我知道从音频文件到MIDI的转换是一个非常复杂的过程.我目前正在为我的学士学位开发一个课程项目,需要操作MIDI文件.
如果你知道任何好的软件,我会接受建议.我更喜欢通过传递要转换的文件也可以从shell执行的软件.
任何帮助表示赞赏.
我正在使用libcurl向本地服务发送API命令(即在127.0.0.1上).
该程序旨在替换shell脚本(使用该curl程序.)
一切都在工作,除了在某个地方有1秒的延迟,即从我打电话curl_easy_perform()到第一次调用我的读回调函数时经过1秒.
C程序正在使用这些选项(省略了错误检查和回调代码):
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:12345/x");
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)getLengthOfCommandObject());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, &myReadFunction);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &myWriteFunction);
Run Code Online (Sandbox Code Playgroud)
但是,如果我curl像这样从shell 运行:
$ curl --data-binary '<command>' http://127.0.0.1:12345/x
Run Code Online (Sandbox Code Playgroud)
它会立即发送请求,而不会受到1秒延迟的影响.
可能导致延迟的原因是什么,我可以设置一个选项来阻止它吗?
编辑服务器基于mongoose
什么是一个简单快速的方法来获得一个从一开始就返回最多N个元素的迭代器List?
我能想出的最简单的版本是:
#1:
import com.google.common.collect.Iterators;
// ...
public static <E> Iterator<E> lengthLimitedIterator(Iterable<E> source, int maxLen) {
return Iterators.partition(source.iterator(), maxLen).next().iterator();
}
Run Code Online (Sandbox Code Playgroud)
#2:
public static <E> Iterator<E> lengthLimitedIterator(List<E> source, int maxLen) {
return source.subList(0, Math.min(source.size(), maxLen)).iterator();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,两个版本都创建了一个临时性List,这会显着影响性能,因为我在紧密循环中调用了这个方法数百万次
我可以使用其他任何库函数吗?
注意:我无法避免遍历列表,因为我将它传递给一个以迭代器作为参数的方法,我无法修改该类.
我有来自CSV文件的数据,该文件用单引号括起来,例如:
'Company name'
'Price: $43.50'
'New York, New York'
Run Code Online (Sandbox Code Playgroud)
我希望能够在值的开头/结尾替换单引号,但在数据中保留引号,例如:
'Joe's Diner' should become Joe's Diner
Run Code Online (Sandbox Code Playgroud)
我可以
updateString = theString.replace("^'", "").replace("'$", "");
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否可以将它组合起来只做一次替换.
我想通过使用图形拉伸图像,但这里不能使用我的代码它显示我想要的图像大小而不是图像
void imageload () {
FileDialog fd = new FileDialog(MainFram.this,"Open", FileDialog.LOAD);
fd.show();
if(fd.getFile() == null){
//Label1.setText("You have not chosen any image files yet");
}else{
String d = (fd.getDirectory() + fd.getFile());
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image1 = toolkit.getImage(d);
saveImage = d;//if user want to save Image
ImageIcon icon=new ImageIcon(Image1);
lblImage.setIcon(icon);
lblImage.setMinimumSize(new Dimension(50, 70));
lblImage.repaint();
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个C函数:
double f(int x)
{
if (x <= 0)
return 0.0;
else
return x * log(x);
}
Run Code Online (Sandbox Code Playgroud)
我在一个紧凑的循环中调用,并希望摆脱分支,看看它是否提高了性能.
我不能用这个:
double f(int x)
{
return x * log(x);
}
Run Code Online (Sandbox Code Playgroud)
因为它返回的NaN时间x == 0(大约25%的时间都是如此).
有没有另一种方法来实现它,以便它返回0时x == 0,但仍然摆脱分支?
(我不太关心负输入,因为这些是错误,而零则不是.)