这在某种程度上是对我过去几周匆匆解决的一个以前未解答的问题(链接)的跟进,现在它已经到了我不能再发展的地步......
所以这是交易; 我有比纯CS更多的数学/工程背景,所以我在正确/大规模软件开发方面没有很多经验,而是脚本和算法.现在,我工作的一个大项目,我自己,我很困惑的一些发展的各个方面.其中一个是处理库/依赖项
我已初步创建了一个名为文件夹lib下(在Eclipse工作空间)我的项目文件夹,并在里面复制我的外部库,然后将它们添加到构建路径.然而后来我需要一些其它的东西一样JCommons,JFreeChart,Apache Commons Math等.根据这些指令库可以/应当被包括作为用户库,允许开发者看到从IDE(如Eclipse)内的文件和源代码.到目前为止,我已经把它弄好了,我希望......
那问题出在哪里?首先,它出现了,因为上面提到的用户库没有包含在项目的SVN副本中,这意味着想要测试我的项目的同事不能这样做,只需从SVN获取项目.现在,当我在工作中更改我的工作站时,问题的第二阶段没有表面,我想从我的备份中将我的项目导入Eclipse,但是除了那些用户库之外的所有内容都在那里.为了使事情变得更复杂,当这个软件完成后,它将在服务器上实现,因此如果所有内容都可以打包到一个单独的库或更好的可运行jar文件中,那将是绝对最佳的.
我之前被建议看看Maven,或者Ivy,但是在检查它们之后我最初的理解是它们从一开始就被使用,主要用于更复杂的项目.老实说,我完全不知道如何管理我的依赖项.有任何想法吗?
(抱歉让它保持很长时间,但我认为更完整,而且信息不充分)
编辑:我设法解决了问题; 问题显然源于eclipse没有将所有资源复制到一个地方的简单事实,而某些库的安装说明并没有真正警告你如何以最佳方式管理库.
感谢大家,他们花时间尝试帮助我.我会及时看看像Maven和Ivy这样的项目,这绝对是有趣的东西.但是现在我只需要回到运行状态的软件,长时间摔跤新东西.. :)
首先我要说的是,我一直在阅读拖放教程和类似的问题,但不幸的是,我对这件事情感到更加困惑.我想要实现的是相对简单的,所以我很惊讶它已经让我陷入了这么多麻烦.我正在编写一个小型实用程序应用程序,它将一堆结果文件(自定义的xml-type)合并到一个大的制表符分隔的文本文件中.大多数功能已经编码,但我想为它制作一个体面的GUI.
我想要的是能够以JTextArea一种美好而亲切的方式将文件拖放到组件中(例如)(读取:不是完整路径,而是一个小图标和名称).我希望能够提供一个JFileChooser浏览文件.然后我将按顺序解析文件以生成我想要的矩阵.
到目前为止我所学到的是框架已经存在,但是需要定制任何其他功能.我在Netbeans中创建了一个测试GUI,并尝试将一堆文件拖到a上JTextArea,但它们显示为文件路径,不可否认它看起来非常难看.
我非常感谢有关如何以一种巧妙的方式解决(或澄清)这个问题的任何提示和指导.请注意,我打算在多个不同的操作系统(Mac,Win和Linux)上使用该软件.
编辑:我到目前为止的代码是基于Sun教程中的一个示例,如下所示
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.TitledBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.*;
public class ConsolidatorDemo extends JPanel implements ActionListener {
private static final long serialVersionUID = -4487732343062917781L;
JFileChooser fc;
JButton clear;
JTextArea dropZone, console;
JSplitPane childSplitPane, parentSplitPane;
PrintStream ps;
public ConsolidatorDemo() {
super(new BorderLayout());
fc = new JFileChooser();;
fc.setMultiSelectionEnabled(true);
fc.setDragEnabled(true);
fc.setControlButtonsAreShown(false);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
JPanel fcPanel = new JPanel(new BorderLayout());
fcPanel.add(fc, BorderLayout.CENTER); …Run Code Online (Sandbox Code Playgroud) 在我的一个项目中,我使用JUNG2来可视化一个非常大的多父层次结构图,显示在一个applet中.我需要将图形的整个/部分导出为高分辨率静止图像,因为打印时屏幕截图看起来很可怕(特别是如果图形已经缩小).
我目前使用的代码如下:
public void writeToDisk(File saveToFolder, String filename) {
//Dimension loDims = getGraphLayout().getSize();
Dimension vsDims = getSize();
int width = vsDims.width;
int height = vsDims.height;
Color bg = getBackground();
BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
Graphics2D graphics = im.createGraphics();
graphics.setColor(bg);
graphics.fillRect(0,0, width, height);
paintComponent(graphics);
try{
ImageIO.write(im,"png",new File(saveToFolder,filename));
}catch(Exception e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生分辨率不是特别高的PNG图像.所以我的问题如下:
提前致谢,
我正在研究一个以加法模型为中心的CPU密集型ML问题.由于添加是主要操作,我可以将输入数据分成多个部分并生成多个模型,然后通过覆盖__add__方法合并.
与多处理相关的代码如下所示:
def pool_worker(filename, doshuffle):
print(f"Processing file: {filename}")
with open(filename, 'r') as f:
partial = FragmentModel(order=args.order, indata=f, shuffle=doshuffle)
return partial
def generateModel(is_mock=False, save=True):
model = None
with ThreadPool(args.nthreads) as pool:
from functools import partial
partial_models = pool.imap_unordered(partial(pool_worker, doshuffle=is_mock), args.input)
i = 0
for m in partial_models:
logger.info(f'Starting to merge model {i}')
if model is None:
import copy
model = copy.deepcopy(m)
else:
model += m
logger.info(f'Done merging...')
i += 1
return model
Run Code Online (Sandbox Code Playgroud)
问题是内存消耗随着模型顺序的增加而呈指数级增长,因此在第4阶段,模型的每个实例大约为4-5 GB,这会导致线程池崩溃,因为中间模型对象不是可拾取的.
我读到了这一点,看起来即使酸洗不是问题,传递这样的数据仍然是非常低效的,如对此答案的评论.
但是,关于如何为此目的使用共享内存的指导很少.是否可以避免此问题而无需更改模型对象的内部结构?
我正在开发的项目需要对数据库进行大量查询.原则上我使用两种类型的查询:
从excel文件中读取,检查几个参数并对数据库中的命中进行查询.然后将这些命中注册为一系列自定义类.任何命中都可能(并且很可能会)多次出现,因此这部分代码会检查并更新扩展ArrayList的自定义列表实现中的事件.
对于找到的每个匹配,执行详细查询并解析输出,以便在(I)中创建的类获取详细信息.
我想我会使用多个线程来优化时间.但是我无法想出一个很好的方法来解决这些项目存储在集合中的问题.详细说明一下; 在整个执行对象中,应该由(I)和(II)修改.
我故意没有c/p任何代码,因为这将是大块的代码有任何意义..我希望它与上面的描述有一定道理.
谢谢,
这是潜在问题的背景,我正在与一个使用Swt库的项目小组合作,我正在尝试打包软件进行部署.事实证明,SWT它非常依赖于平台/架构.我希望能够将所有六个jar(linux,mac,win和32/64位)打包到同一个包中,并根据系统使用相应的库.我意识到这是一个艰难的挑战,但转换到Swing(或其他任何东西)现在并不是一个真正的选择.
我找到了许多相关主题(@Aaron Digulla的主题和@ mchr的主题),它为我提供了有关手头问题的宝贵见解.我试图落实@Alexey罗曼诺夫提出的解决方案在这里.有一点不同,因为loadSwtJar()他提出的方法不是静态的,我实例化对象,然后紧接着,在对对象做任何其他事情之前运行方法.
看起来装载过程无法正常工作.我对此声明的推理如下:
Swt从可执行jar文件的类路径中删除所有jar,则Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/events/MouseListener抛出由以下原因引起的:java.lang.ClassNotFoundException: org.eclipse.swt.events.MouseListener 对我来说,这意味着在类路径中找不到库,我错了吗?
swtjar类保留在类路径上,则系统在执行期间使用第一个jar文件.这意味着如果gtk-linux-x86_64恰好是jar列表中的第一个swt jar,那么无论系统是win32还是Mac OSX,系统都会尝试使用它.我试图添加一些输出来查看该loadSwtJar()方法是否选择了正确的jar,并且输出似乎在我尝试的所有平台上都正确,因为选择了正确的包(并且文件确实存在于runnable jar中).但是仍然没有加载正确的库因此导致执行错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException由ex引起:( Caused by: java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
请注意,如果我更改build.xml文件上64位和32位swt库的出现顺序,这是我在Linux机器上出现的错误)
那么,这里的问题似乎是什么?我是否错过了一些细节,或者根本无法检查系统属性并相应地加载适当的库?
下面是我的构建文件的摘录,认为它可能有助于找到问题的根源.
提前致谢,
编辑:经过与同事的长时间调试,问题得到解决(除了我在这里提到的关于MacOS上的线程管理的烦人的错误).它涉及到使用ANT构建进行调整以及编写主类的方式.(事实证明,主类是从SWT库扩展和实现引用,这意味着代码根本不会编译,用另一个类包装主类并从那里加载SWT jar似乎已经足够了解决这个问题)
感谢所有贡献的人,特别是@Aaron.非常感谢!
我意识到这可能不是最常用的正则表达式,但我想知道它在理论上是否可行.
给出一个文本文件示例:
MYL3 P08590
MYL3 B2R534
MYL3 Q9NRS8
TM38A Q9H6F2
TM38A A8K9P9
TRFE P02787
TRFE O43890
TRFE Q1HBA5
TRFE Q9NQB8
TRFE Q9UHV0
ETFA P13804
KCRM P06732
KCRM Q96QL9
Run Code Online (Sandbox Code Playgroud)
...只要使用正则表达式,是否可以匹配以与前一行相同的模式开头的行?匹配和替换行(符合条件)没有任何东西将是这样的:
MYL3 P08590
TM38A Q9H6F2
TRFE P02787
ETFA P13804
KCRM P06732
Run Code Online (Sandbox Code Playgroud)
我的猜测是,即使可以使用多行匹配来检查前一行,也不可能只通过正则表达式完成,因为没有定义的模式可以匹配,而只是第一个(几个)连续的单词.它需要将一行的开头定义为"变量",并将下一行的开头与之比较,据我所知,单凭正则表达式是不可能的.
另一方面,一位同事声称可能取决于正则表达式的实施.我以为我会问这里的专家.. :)
在我的应用程序中,JAXB输出生成如下:
this.marshalOut(jaxb_Object, fileOutputStream);
这是对生成XML文件的spring Object XML Mapping Marshallers的方法调用.现在,我也喜欢在这一行之后生成JSON文件.任何人都有关于使用JAXB输入生成JSON输出的想法.
我在网上找到了这个示例代码:
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JacksonAnnotationIntrospector();
// make deserializer use JAXB annotations (only)
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
// make serializer use JAXB annotations (only)
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
mapper.writeValue( outputStream, jaxb_object);
Run Code Online (Sandbox Code Playgroud)
本setAnnotationIntrospector已过时,是否有解决这个问题的任何其他方式?
我想用每组中的观察数量来注释我的小提琴情节.所以问题基本上与这个问题相同,除了:
让我们从Seaborn API文档中获取此示例:
import seaborn as sns
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", data=tips)
Run Code Online (Sandbox Code Playgroud)
我希望在小提琴之上有n = 62,n = 19,n = 87,并且n = 76.这可行吗?
我在客户端上有以下代码:
DataInputStream dis = new DataInputStream(socketChannel.socket().getInputStream());
while(dis.available()){
SomeOtherClass.method(dis);
}
Run Code Online (Sandbox Code Playgroud)
但是available()不断返回0,尽管流中有可读数据。因此,在要读取的实际数据完成之后,空数据将传递到另一个要读取的类,这将导致损坏。
经过一番搜索;我发现available()在与套接字一起使用时这是不可靠的,我应该从流中读取前几个字节以实际查看是否有数据可解析。
但就我而言 我必须将DataInputStream我从套接字获得的引用传递给我无法更改的其他类。
是否可以从中读取一些字节DataInputStream而不破坏它,或者有其他建议?